Vous pouvez utiliser l'attribut inutilisé de gcc / clang, mais j'utilise ces macros dans un en-tête pour éviter d'avoir des attributs spécifiques à gcc partout dans la source, avoir aussi __attribute__
partout est un peu bavard / 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)) { ... }
Je préfère cela parce que vous obtenez une erreur si vous essayez d'utiliser bar
le code n'importe où, vous ne pouvez donc pas laisser l'attribut par erreur.
et pour les fonctions ...
static void UNUSED_FUNCTION(foo)(int bar) { ... }
Note 1):
Pour autant que je sache, MSVC n'a pas d'équivalent à __attribute__((__unused__))
.
Note 2):
La UNUSED
macro ne fonctionnera 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 la UNUSED
macro que j'ai trouvé jusqu'à présent, dans ces cas, je retombe à(void)coords;