Me gustaría saber qué conmutador pasa al compilador gcc para desactivar las advertencias de variables no utilizadas. Recibo errores de boost en Windows y no quiero tocar el código de boost:
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 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?
c++
gcc
compiler-warnings
compiler-flags
WilliamKF
fuente
fuente
-Werror=no-unused-variable
Respuestas:
El
-Wno-unused-variable
interruptor suele hacer el truco. Sin embargo, esa es una advertencia muy útil si se preocupan por estas cosas en su proyecto. Sin embargo, se vuelve molesto cuando GCC comienza a advertirle sobre cosas que no están en su código.Le recomendaría que mantenga activada la advertencia, pero use en
-isystem
lugar de-I
incluir directorios de proyectos de terceros. Esa bandera le dice a GCC que no le advierta sobre las cosas sobre las que no tiene control.Por ejemplo, en lugar de
-IC:\\boost_1_52_0
decir-isystem C:\\boost_1_52_0
.Espero eso ayude. ¡Buena suerte!
fuente
-Wno-unused-parameter
para los parámetros de función no utilizados,-Wno-unused-function
para la función no utilizada-Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable
A veces solo necesita suprimir solo algunas advertencias y desea mantener otras advertencias, solo para estar seguro. En su código, puede suprimir las advertencias de variables e incluso parámetros formales utilizando el atributo no utilizado de GCC . Supongamos que tiene este fragmento de código:
Puede haber una situación en la que necesite usar esta función como controlador, que (en mi humilde opinión) es bastante común en la biblioteca C ++ Boost. Luego, necesita la segunda versión de parámetro formal , por lo que la firma de la función es la misma que la plantilla que requiere el controlador; 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 esta:
GCC tiene muchos otros parámetros, puede consultarlos en las páginas de manual . Esto también funciona para los programas C, no solo C ++, y creo que se puede usar en casi todas las funciones, no solo en los controladores. ¡Sigue adelante e inténtalo! ;)
PD: Últimamente usé esto para suprimir las advertencias de la serialización de Boosts en una plantilla como esta:
EDITAR: Aparentemente, no respondí tu pregunta como necesitabas, drak0sha lo hizo mejor. Es porque seguí principalmente el título de la pregunta, mi mal. Con suerte, esto podría ayudar a otras personas, que llegan aquí por ese título ... :)
fuente
void func(unsigned number, const int)
. Entonces, gcc tampoco se quejará de que no se useversion
.gcc
versión que estés usando. IIRC, tuve que usarlo hace 4 años, para suprimir las advertencias sobre no usadoversion
. ;)Si está usando gcc y desea deshabilitar la advertencia para el código seleccionado, puede usar la directiva del compilador #pragma:
Para el código que controlas, también puedes usarlo
__attribute__((unused))
para indicarle al compilador que no se usan variables específicas.fuente
#pragma
directivas @ Dee'Kej son perfectamente seguras si las envuelve en#ifdef some_compiler ... #endif
. Las advertencias son una característica específica del compilador y no están definidas por el estándar. No puede suprimir ninguna advertencia del código sin#pragma
s.Consulte la
man gcc
sección Opciones de advertencia. Ahí tienes un montón deunused
Si antepone a alguno de ellos
no-
, desactivará esta advertencia.Puede encontrar una explicación más detallada en Opciones para solicitar o suprimir advertencias
fuente
El uso
-Wno-unused-variable
debería funcionar.fuente
-Wno-error=unused-variable
si desea eliminar el error y mantener la advertencia.[-Werror=unused-variable]
.El compilador ya te lo está diciendo, no es
value
perovariable
. Que busca-Wno-unused-variable
. Además, intenteg++ --help=warnings
ver una lista de opciones disponibles.fuente
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 propias advertencias y errores.
fuente
-Wall
y-Wextra
establece el escenario en GCC y lo siguiente-Wno-unused-variable
puede no tener efecto. Por ejemplo, si tiene:CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -Wall -Wextra \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ -Wno-unused-parameter \ -Wno-unused-variable \ $(INC)
entonces GCC ve la instrucción
-Wall -Wextra
y parece ignorar-Wno-unused-variable
En cambio, esto puede verse así a continuación y obtendrá el efecto deseado de no ser detenido en su compilación en la variable no utilizada:
CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ $(INC)
Hay una buena razón por la que se denomina "advertencia" frente a "error". Fallar en la compilación solo porque su código no está completo (digamos que está eliminando el algoritmo) puede ser frustrante.
fuente
Muestra advertencias, pero continúa con la compilación.
fuente