我刚刚决定将尽可能多的变量从unsigned
toint
和重新编译有问题的代码时,受到以下警告消息的欢迎:
freespace_state.c:203: warning: assuming that the loop is not infinite
有问题的行:
for (x = startx; x <= endx; ++x, ++xptr)
这个循环是 60 行代码(包括空格/括号等),其中有一个goto
,并且至少出现一次continue
.
在这种情况下,我想我很感激 GCC 假设这个循环不是无限的,因为它永远不应该无限循环。
GCC 想在这里告诉我什么?
警告的语法几乎暗示该警告应在其他警告的上下文中进行,但在该上下文中没有。
[编辑] 这完全是我自己的错。我在没有真正理解它们的情况下从这里的一个问题中窃取了一些优化和警告选项,并且已经忘记了它们。
请参阅 Mark Rushakoff 的回答,此外,我还曾经-Wunsafe-loop-optimizations
明确警告 GCC 是否正在对循环进行假设。见http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html