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-valuey, -Wno-unused-valuepero 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 -Wallanula mi objetivo?
c++
gcc
compiler-warnings
compiler-flags
WilliamKF
fuente
fuente

-Werror=no-unused-variableRespuestas:
El
-Wno-unused-variableinterruptor 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
-isystemlugar de-Iincluir 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_0decir-isystem C:\\boost_1_52_0.Espero eso ayude. ¡Buena suerte!
fuente
-Wno-unused-parameterpara los parámetros de función no utilizados,-Wno-unused-functionpara la función no utilizada-Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variableA 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.gccversió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
#pragmadirectivas @ 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#pragmas.Consulte la
man gccsección Opciones de advertencia. Ahí tienes un montón deunusedSi 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-variabledebería funcionar.fuente
-Wno-error=unused-variablesi desea eliminar el error y mantener la advertencia.[-Werror=unused-variable].El compilador ya te lo está diciendo, no es
valueperovariable. Que busca-Wno-unused-variable. Además, intenteg++ --help=warningsver 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
-Wally-Wextraestablece el escenario en GCC y lo siguiente-Wno-unused-variablepuede 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 -Wextray parece ignorar-Wno-unused-variableEn 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