Warum MSVC die Warnung C4127 generiert, wenn die Konstante in "while" - C verwendet wird

7

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?

    
Navaneeth K N 16.08.2010, 05:33
quelle

2 Antworten

12

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

bedeutet     
Nordic Mainframe 16.08.2010, 05:37
quelle
8

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.

    
GManNickG 16.08.2010 05:36
quelle