Pregunta ¿Cómo se desactivan las advertencias variables no utilizadas que salen de gcc en un código de terceros que no deseo editar?


Me gustaría saber qué cambio pasas al compilador gcc para desactivar las advertencias variables no utilizadas? Estoy recibiendo errores de impulso en Windows y no quiero tocar el código de impulso:

C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]

Intenté usar ambos -Wunused-value y -Wno-unused-value pero ninguno suprimió los mensajes de arriba.

Cuál es el comando correcto, aquí está mi línea de compilación:

g++  -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion 
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated 
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 
-c -o op.o op.cpp

Quizás el -Wall anula mi objetivo?


75
2018-02-24 16:24


origen


Respuestas:


los -Wno-unused-variable el interruptor generalmente hace el truco. Sin embargo, esa es una advertencia muy útil si te importan estas cosas en tu proyecto. Sin embargo, se vuelve molesto cuando GCC comienza a advertirte sobre cosas que no están en tu código.

Te recomendaría que mantengas la advertencia encendida, pero usa -isystem en lugar de -I para incluir directorios de proyectos de terceros. Esa bandera le dice a GCC que no te advierta sobre las cosas sobre las que no tienes control.

Por ejemplo, en lugar de -IC:\\boost_1_52_0decir -isystem C:\\boost_1_52_0.

Espero eso ayude. ¡Buena suerte!


195
2018-02-24 16:31



A veces solo necesitas suprimir algunas advertencias y quieres tener otras advertencias, solo para estar seguro. En su código, puede suprimir las advertencias de las variables e incluso los parámetros formales mediante el uso de GCC no usado atributo. Digamos que tienes este fragmento de código:

void func(unsigned number, const int version)
{
  unsigned tmp;
  std::cout << number << std::endl;
}

Puede haber una situación en la que necesite usar esta función como manejador, que (imho) es bastante común en la biblioteca C ++ Boost. Entonces necesitas el segundo parámetro formal versión, por lo que la firma de la función es la misma que la plantilla que requiere el manejador, de lo contrario la compilación fallaría. Pero tampoco lo necesitas en la función en sí ...

La solución de cómo marcar la variable o el parámetro formal que se excluirá de las advertencias es la siguiente:

void func(unsigned number, const int version __attribute__((unused)))
{
  unsigned tmp __attribute__((unused));
  std::cout << number << std::endl;
}

GCC tiene muchos otros parámetros, puede verificarlos en páginas man. Esto también funciona para los programas C, no solo para C ++, y creo que se puede usar en casi todas las funciones, no solo en los controladores. ¡Sigue adelante e inténtalo! ;)

P.S .: Últimamente utilicé esto para suprimir las advertencias de la serialización de Boosts en una plantilla como esta:

template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))

EDITAR: Aparentemente, no respondí tu pregunta como lo necesitaste, drak0sha hecho mejor Es porque principalmente seguí el título de la pregunta, mi mal. Con suerte, esto podría ayudar a otras personas, que llegan aquí por ese título ... :)


59
2018-04-28 02:22



Si está utilizando gcc y desea desactivar la advertencia para el código seleccionado, puede usar la directiva del compilador #pragma:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop

Para el código que controlas, también puedes usar __attribute__((unused)) para instruir al compilador que las variables específicas no se utilizan.


56
2018-03-28 09:17



Ver man gcc en Opciones de advertencia. Ahí tienes un montón de unused 

Opciones de advertencia
  ... -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable

Si prefieres alguno de ellos con no-, desactivará esta advertencia.

Muchas opciones tienen nombres largos que comienzan con -f o con -W --- por ejemplo, -fmove-loop-invariantes, -formato, etc. La mayoría de estos tienen formas positivas y negativas; la forma negativa de -ffoo sería -fno-foo. Este manual solo documenta uno de estos dos formularios, cualquiera que sea el predeterminado.

Se puede encontrar una explicación más detallada en Opciones para solicitar o suprimir advertencias


13
2018-02-24 16:30



Utilizar -Wno-unused-variable Deberia trabajar.


9
2018-02-24 16:26



El compilador ya te está diciendo, no es value pero variable. Estás buscando -Wno-unused-variable. Intenta también g++ --help=warnings para ver una lista de opciones disponibles.


3
2018-02-24 16:28



¿Cómo se desactivan las advertencias variables no utilizadas que salen de gcc?
  Estoy recibiendo errores de impulso en Windows y no quiero tocar el código de impulso ...

Tu visitas Trac de Boost y presentar un informe de error contra Boost.

Su aplicación no es responsable de borrar las advertencias y errores de la biblioteca. La biblioteca es responsable de borrar sus propios avisos y errores.


1
2017-07-26 19:52



Eliminar el -Wall y debería funcionar Problema con la eliminación -Wall es que también suprimirá las advertencias legítimas. Tendría que elegir a mano el -W opciones en este caso o cambiar a -Wno-unused-variable una vez que tenga todas las advertencias cubiertas.

LOCAL_CFLAGS = -Wno-unused-variable -g

-3
2018-05-28 22:13



export IGNORE_WARNINGS=1

Muestra advertencias, pero continúa con la construcción


-3
2017-10-14 09:53