¿Cuál es la mejor manera de silenciar una advertencia sobre variables no utilizadas?

Resuelto Phil Hannent asked hace 15 años • 23 respuestas

Tengo una aplicación multiplataforma y en algunas de mis funciones no se utilizan todos los valores pasados ​​a las funciones. Por lo tanto, recibo una advertencia de GCC que me dice que hay variables no utilizadas.

¿Cuál sería la mejor manera de codificar la advertencia?

¿Un #ifdef alrededor de la función?

#ifdef _MSC_VER
void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal qrLeft, qreal qrTop, qreal qrWidth, qreal qrHeight)
#else
void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal /*qrLeft*/, qreal /*qrTop*/, qreal /*qrWidth*/, qreal /*qrHeight*/)
#endif
{

Esto es muy feo pero parece ser la forma que preferiría el compilador.

¿O asigno cero a la variable al final de la función? (lo cual odio porque altera algo en el flujo del programa para silenciar una advertencia del compilador).

¿Existe una forma correcta?

Phil Hannent avatar Sep 28 '09 20:09 Phil Hannent
Aceptado

Puede ponerlo en (void)var;la expresión " " (no hace nada) para que un compilador vea que se usa. Esto es portátil entre compiladores.

P.ej

void foo(int param1, int param2)
{
    (void)param2;
    bar(param1);
}

O,

#define UNUSED(expr) do { (void)(expr); } while (0)
...

void foo(int param1, int param2)
{
    UNUSED(param2);
    bar(param1);
}
Alex B avatar Sep 28 '2009 13:09 Alex B

En GCC y Clang puedes utilizar la __attribute__((unused))directiva de preprocesador para lograr tu objetivo.
Por ejemplo:

int foo (__attribute__((unused)) int bar) {
   return 0;
}
ezpz avatar Sep 28 '2009 13:09 ezpz

C++17 ahora proporciona el [[maybe_unused]]atributo.

http://en.cppreference.com/w/cpp/language/attributes

Bastante bonito y estándar.

scx avatar May 22 '2017 07:05 scx