ich die Entscheidung nur getroffen hatte, so viele Variablen aus unsigned
zu int
und auf neu zu kompilieren Sie den Code in Frage zu ändern, von dieser Warnmeldung begrüßt wurde:Was ist die Erklärung für „Warnung: unter der Annahme, dass die Schleife nicht unendlich ist“
freespace_state.c:203: warning: assuming that the loop is not infinite
Die Linie in Frage:
for (x = startx; x <= endx; ++x, ++xptr)
Diese Schleife ist 60 Zeilen Code (inc Leerraum/Klammern usw.), und hat eine goto
darin, und mindestens ein Vorkommen von continue
.
In diesem Fall denke ich, ich bin dankbar, dass GCC davon ausgeht, dass diese Schleife nicht unendlich ist, denn sie sollte niemals endlos durchlaufen.
Was versucht der GCC mir hier zu sagen?
Die Grammatik der Warnung weist fast darauf hin, dass die Warnung im Kontext einer anderen Warnung erfolgen sollte, aber in diesem Kontext gibt es keine.
[bearbeiten] Es ist alles vollständig meine eigene Schuld. Ich habe ein paar Optimierungs- und Warnoptionen aus einer Frage hier irgendwo gestohlen, ohne sie wirklich zu verstehen, und habe sie seitdem vergessen.
Siehe Mark Rushakoffs Antwort, und zusätzlich habe ich auch -Wunsafe-loop-optimizations
verwendet, um ausdrücklich zu warnen, wenn GCC Annahmen über eine Schleife macht. Siehe http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Was für eine seltsame Nachricht ... Ich habe versucht zu verstehen, ob es mit dem Blogbeitrag unter http://blog.regehr.org/archives/140 zusammenhängt, aber es wäre seltsam, eine Benutzer-sichtbare Warnung zu senden . Dieser Blogbeitrag befasst sich mit stillen (und begründbaren) Optimierungen. –
Sind Sie sicher, dass Sie in dieser Schleife nicht "int" und "unsigned" mischen? Sind all diese Variablen jetzt int? – AnT
@AndreyT: Alle sind Ints außer Xptr, die ein Zeiger auf ein Uint64_t ist. –