0

J'ai essayé de rechercher la documentation et l'Internet du mieux que je peux, mais je n'ai pas réussi à obtenir un avertissement du compilateur Xcode si l'opérateur d'affectation est utilisé dans une instruction if.Comment demander au compilateur Xcode 3.1 d'avertir l'opérateur d'affectation dans une instruction if?

Je viens de RealBasic, où j'ai une habitude extrêmement forte de taper ce genre de comparaison:

if x = 5 then ... 

En C, bien sûr, que la syntaxe attribue x la valeur de 5 puis des tests le résultat pour voir si elle est différente de zéro, et l'opérateur « correct » est:

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

J'ai trouvé plusieurs mentions que le compilateur devrait être en mesure d'avertir en cas d'une cession effectuée dans un cas de comparaison, mais je ne trouve pas comment l'activer dans Xcode 3.1/gcc. J'ai trouvé l'option -pedantic, mais cela n'a pas semblé générer l'avertissement.

Depuis que j'ai passé deux fois plus de temps à repérer les bogues qui se sont révélés être "=" au lieu de "==", j'aimerais recevoir un avertissement.

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

if (5 = x) { ... } 

... mais qui nécessite de changer les habitudes de codage bien ancrées, aussi. Sans oublier qu'il a l'air maladroit et arriéré.

Merci!

Répondre

1

Le lien dans la réponse de conduire à ennuikiller fait ce que je devais.

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

  • L'avertissement du compilateur est « accolades et les parenthèses manquantes », ou -Wparentheses. L'avertissement est activé en sélectionnant Get Info pour la cible actuelle dans Xcode.

  • Comme je l'ai finalement trouvé, le SDK iPhone Simulator ne pas montrer cette option du compilateur.

  • Commutation du SDK pour iPhone appareil affiche le GCC 4.2 Avertissements section , qui comprend "Missing accolades et les parenthèses".

  • Après avoir allumé cette option dans le kit de développement de l'appareil iPhone, commutation de retour à la similator montre qu'un paramètre de construction « définie par l'utilisateur » a été ajouté: GCC_WARN_MISSING_PARENTHESES = « OUI ».

  • Si une affectation est réellement désirée dans une instruction if, vous pouvez doubler les parenthèses pour éviter l'avertissement .

(par exemple double-parenthèses :)

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

L'avertissement fonctionne comme un charme, mais il ne déteste la norme d'Apple:

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

Je vais probablement laisser les AS- est, bien que si je me retrouve avec une grande quantité d'entre eux dans un projet, je vais doubler la parenthèse ou répartir l'assignation dans une ligne distincte.

Merci!

+0

Ce drapeau n'a pas fonctionné pour moi. J'ai ce code: 'if (newlyCreated = true) {goToLastElement = true; } 'et bien que l'indicateur soit activé, xcode/g ++ n'émet pas d'avertissement. (note: code C++.) –

+0

Je viens de découvrir qu'il ne fonctionne pas pour les variables 'bool': / –

1

Vous cherchez 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 

Cette link décrit comment activer les options via l'interface graphique Xcode

Questions connexes