web-dev-qa-db-fra.com

Quelle est la meilleure façon de supprimer la "variable inutilisée x"?

Quel est le meilleur moyen/le plus soigné de supprimer un compilateur (dans ce cas, gcc) comme "Variable inutilisée x"?

Je ne veux pas donner certains drapeaux à gcc pour supprimer tous ces avertissements, juste pour des cas particuliers.

51
gustaf

Vous avez trouvé un article http://sourcefrog.net/weblog/software/languages/C/unused.html qui explique UNUSED. Il est intéressant de noter que l'auteur modifie également le nom de la variable inutilisée afin que vous ne puissiez pas l'utiliser par inadvertance à l'avenir.

Extrait:

#ifdef UNUSED
#Elif defined(__GNUC__)
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
#Elif defined(__LCLINT__)
# define UNUSED(x) /*@unused@*/ x
#else
# define UNUSED(x) x
#endif

void dcc_mon_siginfo_handler(int UNUSED(whatsig)) 
22
Edward Leno

(void) variable pourrait fonctionner pour certains compilateurs.

Pour le code C++, voir aussi http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/ où Herb Sutter recommande d'utiliser:

template<class T> void ignore( const T& ) { }

...

ignore(variable);
43
jamesdlin

Ne donnez pas un nom à la variable (C++)

void foo(int /*bar*/) {
    ...
}

Dites à votre compilateur en utilisant un mécanisme non standard spécifique du compilateur

Voir les réponses individuelles pour __attribute__((unused)), divers #pragmas et ainsi de suite. Vous pouvez éventuellement envelopper une macro de préprocesseur pour la portabilité.

Éteindre l'avertissement

Les IDE peuvent signaler visuellement les variables inutilisées (couleur différente ou soulignement). Avoir cela, l'avertissement du compilateur peut être plutôt inutile.

Dans GCC et Clang, ajoutez l'option -Wno-unused-parameter à la fin de la ligne de commande (après toutes les options activant l'avertissement de paramètre non utilisé, telles que -Wall, -Wextra).

Ajouter un casting à annuler

void foo(int bar) {
    (void)bar;
}

selon la réponse de jamesdlin et http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/

21
user7610

Si c'est vraiment ce que vous voulez, vous pouvez utiliser l'attribut inutilisé (gcc seulement), quelque chose comme: 

void foo(int __attribute__((__unused__)) bar) {
    ...
}

Pas seulement pour les paramètres de fonction, bien sûr, mais c'est le cas d'utilisation le plus courant, puisqu'il peut s'agir d'une fonction de rappel pour une API où vous n'avez pas besoin de toutes les entrées.

De plus, GLib a une macro G_GNUC_UNUSED qui, je crois, s’étend à cet attribut.

11
Cascabel

Vous pouvez désactiver l'avertissement à l'aide de #pragma

#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wunused"

int unususedVariable = 1;

#pragma clang diagnostic pop

Si vous utilisez GCC, utilisez #pragma gcc ...

11
James Webster

#pragma unused <variable>

3
nmichaels

C'est une solution très compliquée, mais avez-vous simplement essayé d'assigner la variable à elle-même? Je pense que cela devrait inciter la plupart des compilateurs à penser que la variable est utilisée. Devrait être assez portable aussi.

2
Mhmmd

La conversion vers un vide est la meilleure approche car elle montre que vous n'avez pas "accidentellement" conservé la variable dans votre code - c'est-à-dire: cette fonction peut être une instance dans laquelle vous avez une table de pointeurs de fonction nécessitant les mêmes types de paramètres et renvoyer les types, mais dans cette entrée de table particulière vous n'utilisez pas le paramètre.

Cela dit, si vous n'en avez pas besoin, éliminez-vous-en. ;)

0
Mike Stroven