Что является объяснением “предупреждения: предположение, что цикл весьма конечен”

Я только что принял решение для изменения как много переменных от 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

14
задан James Morris 6 June 2010 в 00:21
поделиться

2 ответа

Согласно этот патч 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.
13
ответ дан 1 December 2019 в 14:21
поделиться

Я думаю, что GCC говорит вам, что он не может определить, что цикл не бесконечен, и продолжает компиляцию независимо от этого. Это предупреждение, а не ошибка, но вы можете подумать об этом.

0
ответ дан 1 December 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: