Frage

Ich habe versucht, die Dokumentation der Suche und das Internet so gut wie ich kann, aber ich habe nicht in der Lage, die Xcode-Compiler erhalten eine Verwarnung zu erteilen, wenn der Zuweisungsoperator in einem verwendet wird, wenn Aussage.

Ich bin von Realbasic kommt, wo ich eine extrem starke Gewohnheit Eingabe dieser Art von Vergleich haben:

if x = 5 then ...

In C, natürlich, dass Syntax weist x der Wert von 5 dann das Ergebnis prüft, um zu sehen, ob es ungleich Null ist, und der „richtige“ Operator ist:

if (x == 5) { ... }

ich gefunden habe mehrere erwähnt, dass der Compiler in der Lage sein sollte, zu warnen, wenn eine Zuweisung in ein, wenn der Vergleich gemacht ist, aber ich kann nicht finden, wie es in Xcode 3.1 / gcc einzuschalten. Ich fand die -pedantic Option, aber das schien nicht um die Warnung zu erzeugen.

Da habe ich eine Menge Zeit jetzt zweimal ausgegeben Aufspüren von Fehlern war, die „=“ statt „==“ entpuppte, ich die Hilfe einer Warnung möchten.

Ich weiß, dass ich diese stattdessen tun kann (was einen Compiler-Fehler verursacht):

if (5 = x) { ... }

... aber das erfordert tief verwurzelt Codierung Gewohnheiten ändern, auch. Ganz zu schweigen davon, dass es aussieht ungeschickt und rückwärts.

Danke!

War es hilfreich?

Lösung 2

Der Link in ennuikiller Antwort führte zwar zu dem, was ich brauchte.

Hier ist ein bisschen mehr Informationen für alle, die dies in der Zukunft finden könnte:

  • Der Compiler Warnung "Fehlende Klammern und Klammern" oder -Wparentheses.

  • Die Warnung wird eingeschaltet, indem für die aktuellen Get Info Auswahl Ziel in Xcode.

  • Als ich endlich herausgefunden, das iPhone Simulator SDK hat nicht anzeigen diese Compiler-Option.

  • Umschalten des SDK auf iPhone-Gerät die GCC 4.2 Warnungen zeigen Abschnitt, der enthält „Missing Klammern und Klammern“.

  • Nachdem im iPhone Device SDK auf dieser Option Drehen, Schalte zurück auf die zeigt, dass ein Similator „Benutzerdefiniert“ Build-Einstellung wurde hinzugefügt: GCC_WARN_MISSING_PARENTHESES = "JA".

  • Wenn eine Zuweisung wirklich in einer if-Anweisung gewünscht ist, können Sie Doppel die Klammern um die Warnung zu vermeiden.

(Doppel-Klammern Beispiel:)

if ((x = 5)) { ... }

Die Warnung funktioniert wie ein Charme, obwohl es nicht mögen tut Apple Standard:

if (self = [super init]) { ... }

Ich werde wahrscheinlich diejenigen verlassen, wie sie ist, aber wenn ich mit einer riesigen Menge von ihnen in einem Projekt am Ende, ich werde entweder die doppelte Klammer oder breche die Zuordnung in eine separate Zeile aus.

Danke!

Andere Tipps

Sie suchen nach der -Wall Option, denke ich.

int main(void) {

    int x = 5;
    if ( x=5) { 
    }
    return 0;
  }

$ g++ -pedantic x.cc 
$ g++ -Wall x.cc 
x.cc: In function ‘int main()’:
x.cc:7: warning: suggest parentheses around assignment used as truth value

Diese Link beschreibt, wie Optionen durch die Xcode GUI aktivieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top