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.
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))
(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);
void foo(int /*bar*/) {
...
}
Voir les réponses individuelles pour __attribute__((unused))
, divers #pragma
s et ainsi de suite. Vous pouvez éventuellement envelopper une macro de préprocesseur pour la portabilité.
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
).
void foo(int bar) {
(void)bar;
}
selon la réponse de jamesdlin et http://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/
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.
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 ...
#pragma unused <variable>
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.
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. ;)