Comment puis-je cacher “défini mais non utilisés” mises en garde dans GCC?
J'ai un tas de moment de la compilation, affirme, tels que:
CASSERT(isTrue) or CASSERT2(isTrue, prefix_)
Lors de la compilation avec GCC-je obtenir de nombreuses mises en garde comme 'prefix_LineNumber' defined but not used
. Est il possible que je peux masquer les avertissements de compilation affirme? J'ai pas eu de chance à la recherche de la GCC de la documentation. J'ai pensé que je pourrais avoir le var automatiquement utilisé dans le monde entier à l'intérieur de la même macro, mais je ne pouvais pas penser à une façon de le faire.
Personne ne sait d'une façon de masquer cet avertissement dans GCC?
Vous devez vous connecter pour publier un commentaire.
Viens de voir ce fil de discussion lors de la recherche de solutions à ce problème. Je poste ici pour l'intégralité de la solution que j'ai trouvé...
Le compilateur GCC indicateurs de contrôle inutilisés avertissements comprennent:
Chacun de ces a une forme négative avec "no-" inséré après le W qui désactive l'avertissement (dans le cas où il a été tourné sur le Mur, par exemple). Ainsi, dans votre cas, vous devez utiliser
Bien sûr, cela fonctionne pour l'ensemble du code, et pas seulement au moment de la compilation affirme. Pour la fonction spécifique de comportement, ont un oeil à Les attributs des fonctions du.
Solution pour GCC pas à l'origine de conflits avec d'autres compilateurs
Vous pouvez créer un null déclaration et jeté le résultat à vide. Ce est portable sur les compilateurs, et gcc ne vous donnera pas tous les avertissements, même avec
-Wall
et-Wextra
activé. Par exemple:Une technique courante est de créer une macro pour cela:
(void)system(cmd.c_str());
je ne comprends pas pourquoi cela devrait générer un avertissement.C'est l'un des plus souvent embêtant mises en garde, bien que j'ai comprenons qu'il peut être utile (parfois) pour vérifier du code mort. Mais j'ai l'habitude de fonctions statiques à des fins de débogage, ou des fonctions que peut-être utile dans le futur, ou qui ne sont utilisées que temporaly, et je veux les garder dans le code.
Heureusement, cet avertissement ne prend pas en charge les fonctions inline.
#ifdef UNIT_TEST static foo()
?pour toute variable suffit d'utiliser la macro ci-dessus avant de son type par exemple:
C'est difficile de répondre sans connaître les détails de votre statique affirmer macros. Peut-être que vous pourriez changer pour une autre macro pour éviter ce problème? Vous pouvez soit ajouter le "inutilisé" de l'attribut de la macro comme on l'a suggéré, ou vous pouvez utiliser un autre formulaire de CASSERT().
Voici la description de quelques solutions de rechange:
http://www.jaggersoft.com/pubs/CVu11_3.html
http://blog.kowalczyk.info/kb/compile-time-asserts-in-c.html
http://www.pixelbeat.org/programming/gcc/static_assert.html
Comment sur
-Wunused-label
?Envelopper cette fonction par les directives suivantes
Tout le code qui sera placé entre le push et pop ne sera pas vous avertir à propos des fonctions inutilisées.
Tout le reste du code (en dehors de push et pop) ne seront pas affectés.