Est-il un moyen de supprimer les avertissements dans Xcode?

y a-t-il un moyen de supprimer les avertissements dans Xcode?

par exemple, j'appelle une méthode non documentée et comme la méthode n'est pas dans l'en-tête, je reçois un avertissement sur la compilation. Je sais que je peux l'ajouter à ma tête pour arrêter l'avertissement, mais je me demande si il existe un moyen autre que de l'ajouter à l'en-tête (pour que je puisse conserver les en-têtes propre et standard) pour supprimer l'avertissement? Un pragma ou quelque chose comme ça?

107
demandé sur iDeveloper 2008-10-12 01:21:29

9 réponses

pour désactiver les Avertissements par fichier, en utilisant Xcode 3 et llvm-gcc-4.2 vous pouvez utiliser:

#pragma GCC diagnostic ignored "-Wwarning-flag"

où le nom de l'avertissement est un drapeau d'avertissement gcc.

Ceci annule tous les signaux d'avertissement sur la ligne de commande. Il ne fonctionne pas avec tous les avertissements. Ajouter-fdiagnostics-show-option à vos CFLAGS et vous pouvez voir quel drapeau vous pouvez utiliser pour désactiver cet avertissement.

139
répondu robottobor 2016-04-26 12:21:19

il y a une façon plus simple de supprimer variable non utilisée Avertissements:

#pragma unused(varname)

EDIT: source: http://www.cocoadev.com/index.pl?XCodePragmas

Mise à jour

: Je suis venu avec une nouvelle solution, une plus robuste

  1. ouvrir le projet > modifier la cible Active> onglet Construire.
  2. sous User-Defined : trouver (ou créer Si vous ne trouver un) la clé: GCC_WARN_UNUSED_VARIABLE mettre à NO .

EDIT-2 Exemple:

BOOL ok = YES;
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

le compilateur affiche la variable d'avertissement non utilisée pour ok .

Solution:

BOOL ok = YES;
#pragma unused(ok)
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

PS: Vous pouvez également régler / réinitialiser un autre avertissement: GCC_WARN_ABOUT_RETURN_TYPE : YES/NO

48
répondu thesummersign 2012-04-05 11:46:12

pour gcc, vous pouvez utiliser

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop

vous pouvez en savoir plus sur GCC pragma ici et pour obtenir le code d'avertissement d'un avertissement aller au navigateur de journal (commande+7), Sélectionnez la construction la plus en haut, étendre le journal (le bouton ' = 'sur la droite), et faire défiler vers le bas et là votre code d'avertissement est entre crochets comme ceci [-Wshadow-ivar]

pour clang vous pouvez utiliser

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop
29
répondu Inder Kumar Rathore 2014-09-06 12:48:41

afin de réduire un avertissement pour un fichier individuel procédez de la manière suivante:

, sélectionnez le fichier dans le projet xcode. appuyez sur obtenir des informations aller à la page avec les options de construction entrez -Wno - de nier un avertissement:

- Wno -

p.ex.

-Wno-inutilisé-paramètre

Vous pouvez obtenir le nom de l'avertissement si vous regardez sur le projet paramètres regardez les Avertissements GCC situés au bas de la page de l'onglet Construire, en cliquant sur chaque avertissement, il vous indiquera le nom du paramètre d'avertissement:

p.ex.

avertir chaque fois qu'un paramètre de fonction est inutilisés à part sa déclaration. [GCC_WARN_UNUSED_PARAMETER, -Wunused-paramètre]

25
répondu Anders 2010-10-19 01:05:48

pour se débarrasser de l'avertissement: essayez de créer une interface de catégorie pour l'objet en question

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

-(void) myMethod {
...
   [theObject theUndocumentedMethod];
...
}

de côté, je fortement déconseille d'appeler des méthodes non documentées dans le code d'expédition. L'interface peut et va changer, et ce sera votre faute.

5
répondu Mark Pauley 2010-10-19 01:17:01

avec L'Objectif-C, un certain nombre d'erreurs graves apparaissent seulement comme des avertissements. Non seulement I jamais désactiver les Avertissements, je tourne normalement sur "Traiter les avertissements comme des erreurs" (-Werror).

chaque type d'avertissement dans votre code peut être évité en faisant les choses correctement (normalement en jetant des objets au bon type) ou en déclarant des prototypes quand vous en avez besoin.

4
répondu Matt Gallagher 2008-11-10 06:57:05

http://nshipster.com/pragma/#inhibiting-warnings - passer à la section des avertissements inhibiteurs

4
répondu Austin France 2016-03-23 22:15:13

créer un nouveau fichier d'en-tête séparé appelé 'Undocumented.h " et l'ajouter à votre projet. Ensuite, créez un bloc d'interface pour chaque classe sur laquelle vous voulez appeler des fonctions sans-papiers et donnez à chacune une catégorie de '(sans-papiers)'. Ensuite, il suffit d'inclure ce fichier d'en-tête dans votre PCH. De cette façon, vos fichiers d'en-tête originaux restent propres, il n'y a qu'un autre fichier à maintenir, et vous pouvez commenter une ligne dans votre PCH pour réactiver tous les Avertissements.

j'ai aussi utilisez cette méthode pour amorti fonctions dans 'Amorti.h "d'une catégorie de" (amortis)".

la meilleure partie est que vous pouvez sélectivement activer/désactiver les Avertissements individuels en commentant ou décommentant les prototypes individuels.

3
répondu MarqueIV 2010-07-07 02:59:37

supprimer cet avertissement n'est pas sûr. Le compilateur doit connaître les types d'arguments et retourne à une méthode pour générer du code correct.

Par exemple, si vous appelez une méthode comme ceci

[foo doSomethingWithFloat: 1.0];

qui prend un flotteur, et il n'y a pas de prototype visible, alors le compilateur va deviner que la méthode prend un double, pas un flotteur. Cela peut causer des accidents et valeurs mal interprétées. Dans l'exemple ci-dessus, sur une petite machine endian comme les machines intel, la méthode du récepteur verrait 0 passer, pas 1.

vous pouvez lire pourquoi dans le i386 ABI docs , ou vous pouvez simplement corriger vos Avertissements. :- )

1
répondu Ken 2008-10-15 07:07:44