Здесь есть цикл, который проходит через строку C обратной:Сравнивая беззнаковое выражение с 0
size_t slen = strlen(string);
for (size_t i = slen-1; i >= 0; i--) {
/* do stuff */
}
И когда я скомпилировать этот код с gcc -Wall -Wextra -std=c99 -o code code.c
, я получаю это предупреждение:
предупреждение: сравнение of unsigned expression> = 0 всегда верно [-Wtype-limits]
При обращении к этому предупреждению я заменил этот цикл вместо:
for (int i = (int)slen-1; i >= 0; i--) {
Это прекрасно работает, но мне было интересно узнать, был ли это способ сделать первый цикл все еще скомпилированным без предупреждения выше? Это предупреждение срабатывает только при компиляции с -Wextra
.
Почему вы хотите сделать первый цикл компиляции без предупреждений? Это логически неверно, как предупреждает вам предупреждение. Поэтому не уверен, чего вы пытаетесь достичь, пытаясь сохранить этот неправильный код. – kaylum
@kaylum просто интересно из любопытства. Прочитав немного больше, я должен согласиться с вами, что это неправильный код. – RoadRunner
В чем смысл компиляции первого цикла? Необязательная переменная всегда '> = 0', поэтому зачем даже проверять? –