Comment faire en sorte que le compilateur Xcode 3.1 avertisse l'opérateur d'affectation dans une instruction if?

StackOverflow https://stackoverflow.com/questions/1405669

Question

J'ai essayé de chercher du mieux possible dans la documentation et sur Internet, mais je n'ai pas réussi à ce que le compilateur Xcode envoie un avertissement si l'opérateur d'affectation est utilisé dans une instruction if.

Je viens de RealBasic, où j’ai l’habitude de taper ce genre de comparaison:

if x = 5 then ...

En C, bien sûr, cette syntaxe attribue à x la valeur de 5, puis teste le résultat pour voir si elle est différente de zéro et si le paramètre "correct" est correct. l'opérateur est:

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

J'ai trouvé à plusieurs reprises que le compilateur devrait pouvoir avertir si une affectation est faite dans une comparaison if, mais je ne trouve pas comment l'activer dans Xcode 3.1 / gcc. J'ai trouvé l'option -pedantic , mais cela ne semble pas avoir généré l'avertissement.

Depuis que j'ai passé pas mal de temps à deux reprises maintenant à la recherche de bogues qui se sont révélés être "" =". au lieu de "==", je voudrais l'aide d'un avertissement.

Je sais que je peux le faire à la place (ce qui provoquera une erreur du compilateur):

if (5 = x) { ... }

... mais cela nécessite également de changer ses habitudes de codage bien ancrées. Sans compter que cela semble maladroit et en arrière.

Merci!

Était-ce utile?

La solution 2

Le lien dans la réponse de ennuikiller a conduit à ce dont j'avais besoin.

Voici un peu plus d'informations pour tous ceux qui pourraient le trouver à l'avenir:

  • L'avertissement du compilateur est "Accolades et parenthèses manquantes", ou -Wparentheses.

  • L'avertissement est activé en sélectionnant Lire les informations pour le fichier en cours. cible dans Xcode.

  • Comme je l'ai enfin découvert, le kit de développement logiciel (SDK) pour simulateur d'iPhone ne s'affiche pas . cette option du compilateur.

  • Basculer le SDK sur un appareil iPhone affichera les avertissements GCC 4.2 section, qui comprend "manquant" accolades et parenthèses ".

  • Après avoir activé cette option dans le kit de développement logiciel du périphérique iPhone, revenez en arrière. au similateur montre qu'un "Défini par l'utilisateur" paramètre de construction a été ajoutée: GCC_WARN_MISSING_PARENTHESES = "OUI".

  • Si une affectation est vraiment souhaitée dans une instruction if, vous pouvez doublez les parenthèses pour éviter l'avertissement.

(Exemple entre doubles parenthèses:)

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

L'avertissement fonctionne à merveille, même s'il n'aime pas le standard Apple:

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

Je les laisserai probablement tels quels, mais si je me retrouve avec une quantité énorme d’entre eux dans un projet, je doublerai la parenthèse ou répartirai l’attribution sur une ligne distincte.

Merci!

Autres conseils

Vous recherchez l'option -Wall, je pense.

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

Ce lien explique comment activer les options via l'interface graphique Xcode

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top