77 votes

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 nombreux avertissements, 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?

57voto

acidzombie24 Points 28569

Solution pour GCC pas à l'origine de conflits avec d'autres compilateurs

#ifdef __GNUC__
#define VARIABLE_IS_NOT_USED __attribute__ ((unused))
#else
#define VARIABLE_IS_NOT_USED
#endif

int VARIABLE_IS_NOT_USED your_variable;

48voto

mastermemorex Points 101

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.

inline static foo()
{
}

34voto

Adam Rosenfield Points 176408

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:

int var;    // var is not used
(void)var;  // null statement, cast to void -- suppresses warning

Une technique courante consiste à créer une macro:

#define UNUSED(x) ((void)(x))

int var;
UNUSED(var);

3voto

Nathan Kurz Points 477

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 variantes:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X