Чем объясняется «предупреждение: предполагая, что цикл не бесконечен»
Я только что принял решение изменить столько переменных отunsigned
вint
и после перекомпиляции кода был встречен этим предупреждением:
freespace_state.c:203: warning: assuming that the loop is not infinite
Строка, о которой идет речь:
for (x = startx; x <= endx; ++x, ++xptr)
Этот цикл состоит из 60 строк кода (включая пробелы / квадратные скобки и т. Д.) И имеетgoto
в нем, и, по крайней мере, один случайcontinue
.
В этом случае, я думаю, что я благодарен, что GCC предполагает, что этот цикл не является бесконечным, потому что он никогда не должен выполняться бесконечно.
Что GCC пытается сказать мне здесь?
Грамматика предупреждения почти наводит на мысль о том, что предупреждение следует принимать в контексте какого-либо другого предупреждения, но в этом контексте их нет.
[редактировать] Это все полностью моя вина. Я украл некоторые варианты оптимизации и предупреждения из вопроса где-то здесь, не понимая их, и с тех пор забыл о них.
Смотрите ответ Марка Рушакова, и, кроме того, я также использовал-Wunsafe-loop-optimizations
явно предупредить, если GCC делает предположения о цикле. Увидетьhttp://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html