sirven que puedes poner ponen película para los hashtags google funcionan donde como agregar adulto above c++ c macros warnings

c++ - que - sirven los hashtags en youtube



Macro de parámetro UNUSED portátil utilizada en la firma de función para C y C++ (4)

Después de probar y seguir los comentarios, la versión original mencionada en la pregunta resultó ser lo suficientemente buena.

El uso de: #define UNUSED(x) __pragma(warning(suppress:4100)) x (mencionado en los comentarios), puede ser necesario para compilar C en MSVC, pero esa es una combinación tan extraña que no lo incluí al final .

Estoy interesado en crear una macro para eliminar la advertencia de variable no utilizada.

Esta pregunta describe una forma de suprimir la advertencia de parámetros no utilizados escribiendo una macro dentro del código de función:

Universalmente compilador forma independiente de implementar una macro SIN USAR en C / C ++

Pero estoy interesado en una macro que se puede utilizar en la firma de función:

void callback(int UNUSED(some_useless_stuff)) {}

Esto es lo que saqué usando Google ( source )

#ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #elif defined(__cplusplus) # define UNUSED(x) #else # define UNUSED(x) x #endif

¿Puede esto ampliarse aún más para otros compiladores?

Edición: para aquellos que no entienden cómo funciona el etiquetado: quiero una solución para C y C ++. Es por eso que esta pregunta está etiquetada tanto en C como en C ++ y es por eso que una solución única de C ++ no es aceptable.


En muchos compiladores, he utilizado lo siguiente, excluyendo el soporte para pelusas.

#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) # define PGM_GNUC_UNUSED __attribute__((__unused__)) #else # define PGM_GNUC_UNUSED #endif

Compiladores probados: GCC, Clang, EKOPath, Intel C Compiler / Composer XE, MinGW32 en Cygwin / Linux / MSYS, MinGW-w64 en Cygwin / Linux, Sun ONE Studio / Oracle Solaris Studio, Visual Studio 2008/2010.

Ejemplo de uso:

pgm_tsc_init ( PGM_GNUC_UNUSED pgm_error_t** error ) { ... }

PGM es el prefijo estándar para este proyecto basado en C. GNUC es la convención de GLib para este atributo.

Creo que una compilación advierte sobre __attribute__ en ciertas circunstancias, pero ciertamente no hay error.


La forma en que lo hago es así:

#define UNUSED(x) (void)(x) void foo(const int i) { UNUSED(i); }

No he tenido ningún problema con eso en Visual Studio, Intel, gcc y clang .

La otra opción es simplemente comentar el parámetro:

void foo(const int /*i*/) { // When we need to use `i` we can just uncomment it. }


Solo una pequeña cosa, es mejor usar __attribute__((__unused__)) como __attribute__((unused)) , porque no se puede usar en algún lugar como macro, personalmente tuve algunos problemas con esta situación.

Pero el truco que estoy usando es, que encontré más legible es:

#define UNUSED(x) (void)x;

Sin embargo, funciona solo para las variables y los argumentos de los métodos, pero no para la función en sí.