¿Cuál es la mejor manera de silenciar una advertencia sobre variables no utilizadas?
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?
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);
}
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;
}
C++17 ahora proporciona el [[maybe_unused]]
atributo.
http://en.cppreference.com/w/cpp/language/attributes
Bastante bonito y estándar.