Sur un niveau purement pratique, je dois faire face à ce quotidien. La meilleure solution est d'utiliser le pré-processeur. Mon bon fichier d'en-tête contient:
//-------------------------------------------------------------------------
// Suppress nuisance compiler warnings. Yes, each compiler can already
// do this, each differently! VC9 has its UNREFERENCED_PARAMETER(),
// which is almost the same as the SUPPRESS_UNUSED_WARNING() below.
//
// We append _UNUSED to the variable name, because the dumb gcc compiler
// doesn't bother to tell you if you erroneously _use_ something flagged
// with __attribute__((unused)). So we are forced to *mangle* the name.
//-------------------------------------------------------------------------
#if defined(__cplusplus)
#define UNUSED(x) // = nothing
#elif defined(__GNUC__)
#define UNUSED(x) x##_UNUSED __attribute__((unused))
#else
#define UNUSED(x) x##_UNUSED
#endif
Un exemple de l'utilisation de INUTILISÉE est:
void foo(int UNUSED(bar)) {}
Parfois, vous avez réellement besoin de faire référence au paramètre, par exemple dans un assert() ou de débogage déclaration. Vous pouvez le faire via:
#define USED_UNUSED(x) x##_UNUSED // for assert(), debug, etc
Aussi, les éléments suivants sont utiles:
#define UNUSED_FUNCTION(x) inline static x##_UNUSED // "inline" for GCC warning
#define SUPPRESS_UNUSED_WARNING(x) (void)(x) // cf. MSVC UNREFERENCED_PARAMETER
Exemples:
UNUSED_FUNCTION(int myFunction)(int myArg) { ...etc... }
et:
void foo(int bar) {
#ifdef XXX
// ... (some code using bar)
#else
SUPPRESS_UNUSED_WARNING(bar);
#endif
}