Für Code,
%Vor%MSVC generiert die folgende Warnung.
%Vor% MSDN Seite für die Warnung schlägt vor, for(;;)
zu verwenden anstelle von while(1)
. Ich frage mich, welchen Vorteil for(;;)
gibt und warum es für die ständige Verwendung in while
warnt?
Welche Flagge soll ich bei GCC verwenden, um dieselbe Warnung zu erhalten?
Konstante Bedingungen sind oft genug einfach Fehler. Bedenken Sie Folgendes:
%Vor% Die Bedingung k>=0
würde Sinn ergeben, wenn k ein vorzeichenbehafteter int wäre, aber nicht für unsigned. Ein unvorsichtiger Entwickler vergisst, dass k als nicht signiert deklariert wurde, und er / sie würde es verwenden, als ob es als negative Zahl verwendbar wäre. Der Compiler versucht, hilfreich zu sein und warnt Sie davor und while(1)
fällt für den Compiler in die gleiche Problemklasse. for(;;)
ist vorzuziehen, weil es eindeutig 'loop forever
for(;;)
und while (true)
unterscheiden sich darin, dass ersteres ein Sonderfall ist, der eine Endlosschleife ist, während letzteres eine Art Missbrauch ist, der "wahr, immer" sagt / p>
Die Warnung wird angezeigt, weil Endlosschleifen bei Sie wollen nicht, dass sie ziemlich schlecht sind, also warnen Sie, dass Sie beim ersten Zeichen eines haben könnten. Aber mit for(;;)
haben Sie ziemlich explizit "loop this forever" gesagt, und davor gibt es nichts zu warnen.
Ich glaube nicht, dass GCC eine entsprechende Warnung hat.
Tags und Links c visual-c++ compiler-warnings c4127