Я только что принял решение для изменения как много переменных от unsigned
кому: int
и после перекомпиляции рассматриваемого кода, был встречен этим предупреждающим сообщением:
freespace_state.c:203: warning: assuming that the loop is not infinite
Рассматриваемая строка:
for (x = startx; x <= endx; ++x, ++xptr)
Этот цикл является 60 строками кода (inc пробел / скобки и т.д.) и имеет a goto
в нем, и по крайней мере одно возникновение continue
.
В этом случае я думаю, что я благодарен, что GCC предполагает, что этот цикл весьма конечен, потому что, он никогда не должен циклично выполняться неограниченно долго.
Что GCC пытается сказать мне здесь?
Грамматика предупреждения является почти наводящей на размышления, что предупреждение должно быть взято в контексте некоторого другого предупреждения, но в том контексте нет ни одного.
[редактирование] Это - все полностью мой собственный отказ. Я украл некоторую оптимизацию и предупреждение опций от вопроса на здесь где-нибудь, действительно не понимая их, и с тех пор забыл о них.
См. ответ Mark Rushakoff, и кроме того, я также использовал -Wunsafe-loop-optimizations
явно предупредить, если GCC делает предположения о цикле. См. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Согласно этот патч GCC от 2005 года , похоже, что GCC выполняет «небезопасную оптимизацию цикла» (и вас предупреждают, потому что установлен -funsafe-loop-optimizations
). Если цикл бесконечен , эта конкретная оптимизация каким-то образом не сработает.
Поскольку вы сказали, что это завершающий цикл, похоже, вам не о чем беспокоиться.
Еще одна важная часть патча:
@opindex Wunsafe-loop-optimizations Warn if the loop cannot be optimized because the compiler could not assume anything on the bounds of the loop indices. With @option{-funsafe-loop-optimizations} warn if the compiler made +such assumptions.
Я думаю, что GCC говорит вам, что он не может определить, что цикл не бесконечен, и продолжает компиляцию независимо от этого. Это предупреждение, а не ошибка, но вы можете подумать об этом.