Vous pouvez utiliser gcc/clang inutilisée attribut, cependant je utiliser ces macros dans un en-tête pour éviter d'avoir gcc attributs spécifiques à tous les plus de la source, ayant également __attribute__
partout c'est un peu verbeux/laid.
#ifdef __GNUC__
# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
# define UNUSED(x) UNUSED_ ## x
#endif
#ifdef __GNUC__
# define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
# define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif
Ensuite, vous pouvez faire...
void foo(int UNUSED(bar)) { ... }
et pour les fonctions...
static void UNUSED_FUNCTION(foo)(int bar) { ... }
Je préfère ce parce que vous obtenez un message d'erreur si vous essayez d'utiliser bar
dans le code n'importe où, alors vous ne pouvez pas quitter l'attribut par erreur.
Remarque: pour autant que je sais, MSVC n'a pas d'équivalent à __attribute__((__unused__))
.
Note:
L' UNUSED
macro ne fonctionne pas pour les arguments qui contiennent des parenthèses,
donc, si vous avez un argument comme float (*coords)[3]
vous ne pouvez pas le faire,
float UNUSED((*coords)[3])
ou float (*UNUSED(coords))[3]
, C'est le seul inconvénient de l' UNUSED
macro que j'ai trouvé jusqu'à présent, dans ces cas-je revenir à l' (void)coords;