Ja, es ist ein schlechter Programmierstil. Wenn der Code genau so geschrieben wird, wie Sie es möchten, können Sie die Warnung ignorieren, dies ist jedoch möglicherweise nicht der Fall.
In C ist eine Zuweisung ein Ausdruck. Das bedeutet, dass der Code x = 4;
nicht nur einen Wert von 4 zu x
zuweist, es ist ein Wert von 4 für sich. So können Sie schreiben y = (x = 4);
und Ihre y
einen Wert von 4.
haben, die erzählt wird, die while
Klausel muss einen Wert in den Klammern haben.
while(value) { /* loop body */ }
Sehr oft müssen Sie in zwei Werte vergleichen, wie while(x == 42) { /* do stuff */ }
. Aber was passiert, wenn Sie vergessen, ein zweites '=' zu schreiben und schreiben?
Nun, anstelle des Vergleichs haben Sie eine Aufgabe. Aber hier ist der Trick. Sie sind beide Werte (Ausdrücke, um richtig zu sein). Und während x == 42
einen Wert von 0 hat, wenn x
sich von 42
unterscheidet, wird x = 42
immer einen Wert von 42
haben und den Bedingungstest bestehen.
Deshalb moderne Compiler eine Warnung setzen, wenn sie eine Zuordnung innerhalb while
, if
, und so weiter sehen. Wenn der Code korrekt ist und Sie wirklich die Zuweisung dort haben wollen, legen Sie einen zusätzlichen Satz von Klammern um ihn herum.
while((cmd2Args[count] = strtok(NULL, " "))) {count++}
Das führt uns zurück in die Compilers Warnmeldung wird immer: Wenn Sie das Ergebnis einer Zuweisung als Bedingung verwenden möchten, setzen Sie Klammern um ihn herum.
Andere Art und Weise des Schreibens würde
while((cmd2Args[count] = strtok(NULL, " ")) != 0) {count++}
sein, wo die Absicht des Programmierers ist klar.