Su un livello puramente pratico, ho a che fare con questo quotidiano. La soluzione migliore fino ad oggi è l'utilizzo del pre-processore. Il mio file di intestazione comune contiene:
//-------------------------------------------------------------------------
// 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 esempio dell'uso di UNUSED è:
void foo(int UNUSED(bar)) {}
A volte è davvero necessario fare riferimento al parametro, ad esempio in un assert() o una dichiarazione di debug. È possibile farlo tramite:
#define USED_UNUSED(x) x##_UNUSED // for assert(), debug, etc
Inoltre, i seguenti sono utili:
#define UNUSED_FUNCTION(x) inline static x##_UNUSED // "inline" for GCC warning
#define SUPPRESS_UNUSED_WARNING(x) (void)(x) // cf. MSVC UNREFERENCED_PARAMETER
Esempi:
UNUSED_FUNCTION(int myFunction)(int myArg) { ...etc... }
e:
void foo(int bar) {
#ifdef XXX
// ... (some code using bar)
#else
SUPPRESS_UNUSED_WARNING(bar);
#endif
}
fonte
2012-01-11 04:02:26
la scrittura di file di origine multi-lingua è (molto) un duro lavoro. Ti suggerisco di mantenere ogni singolo file sorgente in una sola lingua. – pmg
@ pmg, grazie per il tuo consiglio,:) – Alcott
Ma se vuoi compilare qualcosa in C e C++, non c'è bisogno di scrivere funzioni separate per usare 'printf' e' str :: cout'. 'printf' funziona per entrambe le lingue. Vorrei raccomandare l'utilizzo di due funzioni che possono essere scritte come una sola, a causa della possibilità che la loro funzionalità potrebbe non essere identica. –