Existe-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 lors de la compilation. Je sais que je peux l'ajouter à mon en-tête pour arrêter l'avertissement, mais je me demande s'il existe un autre moyen que de l'ajouter à l'en-tête (afin que je puisse garder les en-têtes propres et standard) pour supprimer l'avertissement? Un pragma ou quelque chose?
objective-c
xcode
cocoa
cocoa-touch
suppress-warnings
kdbdallas
la source
la source
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
Réponses:
Pour désactiver les avertissements par fichier, en utilisant Xcode 3 et llvm-gcc-4.2, vous pouvez utiliser:
Où le nom d'avertissement est un indicateur d'avertissement gcc.
Cela remplace tous les indicateurs d'avertissement sur la ligne de commande. Cela ne fonctionne pas avec tous les avertissements. Ajoutez -fdiagnostics-show-option à votre CFLAGS et vous pourrez voir quel indicateur vous pouvez utiliser pour désactiver cet avertissement.
la source
#pragma GCC diagnostic ignored "-Wwarning-flag"
déjà suppriméwarning-flag
par l'un des avertissements répertoriés dans gcc.gnu.org/onlinedocs/gcc/Warning-Options.htmlil existe un moyen plus simple de supprimer les avertissements de variables inutilisées :
EDIT: source: http://www.cocoadev.com/index.pl?XCodePragmas
MISE À JOUR: Je suis tombé sur une nouvelle solution, une plus robuste
User-Defined
: recherchez (ou créez si vous n'en trouvez pas) la clé:GCC_WARN_UNUSED_VARIABLE
définissez-la surNO
.Exemple EDIT-2:
le compilateur affiche un avertissement de variable inutilisée pour
ok
.Solution:
PS: Vous pouvez également définir / réinitialiser d'autres avertissements
GCC_WARN_ABOUT_RETURN_TYPE
::YES/NO
la source
Pour gcc, vous pouvez utiliser
Vous pouvez en savoir plus sur le pragma GCC ici et pour obtenir le code d'avertissement d'un avertissement, accédez au Navigateur de rapports (Commande + 9), sélectionnez la version la plus élevée, développez le journal (le bouton '=' à droite) et faites défiler jusqu'au en bas et là, votre code d'avertissement est entre crochets comme celui-ci
[-Wshadow-ivar]
Pour clang, vous pouvez utiliser
la source
Afin de supprimer un avertissement pour un fichier individuel, procédez comme suit:
sélectionnez le fichier dans le projet xcode. appuyez sur obtenir des informations aller à la page avec les options de construction entrez -Wno- pour annuler un avertissement:
par exemple
Vous pouvez obtenir le nom de l'avertissement si vous regardez les paramètres du projet, regardez les avertissements GCC situés en bas de la page de l'onglet de construction, en cliquant sur chaque avertissement, il vous indiquera le nom du paramètre d'avertissement:
par exemple
la source
...m:45:69: Incompatible pointer types sending...
j'ai ouvert l'explication de construction et[-Wincompatible-pointer-types]
je trouve cet avertissement: je viens de le renommer-Wno-incompatible-pointer-types
et de l'ajouter comme indicateur à mon.m
fichier ... boom plus d'avertissements ... +10 si je pourraisAvec Objective-C, un certain nombre d'erreurs graves n'apparaissent que sous forme d'avertissements. Non seulement je ne désactive jamais les avertissements, mais j'active normalement "Traiter les avertissements comme des erreurs" (-Werror).
Chaque type d'avertissement dans votre code peut être évité en faisant les choses correctement (normalement en convertissant les objets au type correct) ou en déclarant des prototypes lorsque vous en avez besoin.
la source
Pour supprimer l'avertissement: essayez de créer une interface de catégorie pour l'objet en question
En passant, je déconseille fortement d' appeler des méthodes non documentées dans le code d'expédition. L'interface peut changer et va changer, et ce sera votre faute.
la source
http://nshipster.com/pragma/#inhibiting-warnings - passez à la section des avertissements d'inhibition
la source
Créez un nouveau fichier d'en-tête distinct appelé «Undocumented.h» et ajoutez-le à votre projet. Créez ensuite un bloc d'interface pour chaque classe sur laquelle vous souhaitez appeler des fonctions non documentées et attribuez à chacune une catégorie «(Non documenté)». Ensuite, incluez simplement ce fichier d'en-tête dans votre PCH. De cette façon, vos fichiers d'en-tête d'origine restent propres, il n'y a qu'un seul autre fichier à maintenir et vous pouvez commenter une ligne dans votre PCH pour réactiver à nouveau tous les avertissements.
J'utilise également cette méthode pour les fonctions dépréciées dans «Depreciated.h» avec une catégorie de «(Depreciated)».
la meilleure partie est que vous pouvez activer / désactiver sélectivement les avertissements individuels en commentant ou en décommentant les prototypes individuels.
la source
La suppression de cet avertissement particulier n'est pas sûre. Le compilateur a besoin de connaître les types d'arguments et retourne à une méthode pour générer le code correct.
Par exemple, si vous appelez une méthode comme celle-ci
[foo doSomethingWithFloat: 1.0];
qui prend un float, et il n'y a aucun prototype visible, alors le compilateur devinera que la méthode prend un double, pas un float. Cela peut provoquer des plantages et des 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 passé, pas 1.
Vous pouvez lire pourquoi dans la documentation ABI i386 ou simplement corriger vos avertissements. :-)
la source