c++ - ejecutar - g++
¿Cómo se desactivan las advertencias variables no utilizadas que salen de gcc en un código de terceros que no deseo editar? (9)
¿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 ...
Visita Boost''s Trac y presenta 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.
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
-Wunused-value
-Wno-unused-value
pero ninguno suprimió los mensajes anteriores.
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?
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 del atributo no utilizado de GCC. 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. Luego necesita la segunda versión del parámetro formal, 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 las 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! ;)
PD: Ú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 drak0sha tu pregunta como lo necesitabas, drak0sha hizo 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 ... :)
El -Wno-unused-variable
usualmente funciona. 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.
Le recomendaría que mantenga -isystem
la advertencia, pero use -isystem
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_0
, diga -isystem C://boost_1_52_0
.
Espero eso ayude. ¡Buena suerte!
El compilador ya te está diciendo que no es un value
sino una variable
. Está buscando -Wno-unused-variable
. Además, pruebe g++ --help=warnings
para ver una lista de opciones disponibles.
Retire la -Wall
y debería funcionar. Problema al eliminar -Wall
es que también eliminará las advertencias legítimas. Tendría que elegir manualmente las opciones -W
en este caso o cambiar a -Wno-unused-variable
una vez que tenga todas las advertencias cubiertas.
LOCAL_CFLAGS = -Wno-unused-variable -g
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 usted controla, también puede usar __attribute__((unused))
para indicar al compilador que las variables específicas no se utilizan.
Use -Wno-unused-variable
debería funcionar.
Ver man gcc
en Opciones de advertencia. Ahí tienes un montón de cosas 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-
, deshabilitará 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
export IGNORE_WARNINGS=1
Muestra advertencias, pero continúa con la construcción