Domanda

Ho provato a cercare la documentazione e Internet nel miglior modo possibile, ma non sono stato in grado di fare in modo che il compilatore Xcode emetta un avviso se l'operatore di assegnazione viene utilizzato in un'istruzione if.

Vengo da RealBasic, dove ho l'abitudine estremamente forte di scrivere questo tipo di confronto:

if x = 5 then ...

In C, ovviamente, quella sintassi assegna x il valore di 5, quindi verifica il risultato per vedere se è diverso da zero e il "corretto" l'operatore è:

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

Ho trovato diverse menzioni che il compilatore dovrebbe essere in grado di avvisare se c'è un compito fatto in un confronto if, ma non riesco a trovare come attivarlo in Xcode 3.1 / gcc. Ho trovato l'opzione -pedantic , ma questo non sembra generare l'avvertimento.

Da quando ho trascorso due volte un bel po 'di tempo a rintracciare i bug che si sono rivelati essere " = " invece di " == " ;, Vorrei l'aiuto di un avviso.

So che posso farlo invece (che causerà un errore del compilatore):

if (5 = x) { ... }

... ma questo richiede anche cambiamenti nelle abitudini di codifica radicata. Per non parlare del fatto che sembra goffo e arretrato.

Grazie!

È stato utile?

Soluzione 2

Il link nella risposta di ennuikiller ha portato a ciò di cui avevo bisogno.

Ecco un po 'più di informazioni per chiunque possa trovarlo in futuro:

  • L'avvertimento del compilatore è " Parentesi graffe e parentesi mancanti " ;, o -Wententeses

  • L'avviso viene attivato selezionando Ottieni informazioni per l'attuale target in Xcode.

  • Come ho finalmente scoperto, iPhone Simulator SDK mostra non questa opzione del compilatore.

  • Il passaggio dall'SDK al dispositivo iPhone mostrerà gli avvisi GCC 4.2 sezione, che include " Mancante parentesi graffe e parentesi " ;.

  • Dopo aver attivato tale opzione nell'SDK del dispositivo iPhone, tornare indietro al similatore mostra che a & Quot; User-Defined " impostazione di build è stata ha aggiunto: GCC_WARN_MISSING_PARENTHESES = & Quot; SÌ ".

  • Se un compito è veramente desiderato in un'istruzione if, puoi farlo raddoppiare le parentesi per evitare l'avvertimento.

(Esempio di parentesi doppie :)

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

L'avvertimento funziona come un fascino, anche se non piace lo standard di Apple:

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

Probabilmente lascerò quelli così come sono, anche se se ne finissi con una grande quantità in un progetto, raddoppierei la parentesi o spezzerei l'incarico in una riga separata.

Grazie!

Altri suggerimenti

Stai cercando l'opzione -Wall penso.

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

Questo link descrive come abilitare le opzioni tramite la GUI Xcode

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top