Quiero una herramienta para analizar C / C ++ (otros son bienvenidos, particularmente PHP, pero C / C ++ == prioridad) y encontrar llamadas a funciones escritas que no verifican el valor de retorno.
No veo una opción g ++ (MS tiene esa opción).
¿ Quizás algo como Férula ? ¿O hay un IDE que me permita verificar esto? Las soluciones GUI y CLI son bienvenidas.
Preferiblemente Linux, pero Windows es aceptable.
Debe ser gratis.
¿Algunas ideas?
En gcc
tienes las siguientes opciones:
-Wunused-result
Advierte si el valor devuelto no se usa -Wunused
advierte sobre una cantidad de casos no utilizados y -Wall
(mi favorito) activa un montón de advertencias, incluido -Wunused-result
Puede encontrar una lista completa de las opciones de advertencia de gcc aquí .
También puede usar atributos de función para configurarlos warn_unused_result
y generar una advertencia si no se usa un valor de retorno de funciones específicas.
Y por supuesto gcc
es gratis.
Extrañamente, ni -Wunused-result ni -Wall funcionaron en g++ v4.6.3. Sin embargo, el atributo de función que sugirió Steve sí lo hizo.
int GenerateRandomNumber() __attribute__((warn_unused_result));
int GenerateRandomNumber()
{
return 4;
}
int main()
{
GenerateRandomNumber();
return 0;
}
da como resultado
**** Compilación de la configuración Debug para el proyecto unused_return_value ****
haga todo el archivo de construcción: ../src/unused_return_value.cpp Invocando: GCC C++ Compiler g++ -O0 -g3 -pedantic -Wall -c -fmessage-length=0 -Wunused-result -MMD -MP -MF"src/unused_return_value. d" -MT"src/unused_return_value.d" -o "src/unused_return_value.o" "../src/unused_return_value.cpp" ../src/unused_return_value.cpp: En la función 'int main()': .. /src/unused_return_value.cpp:10:24:
warning: ignoring return value of ‘int GenerateRandomNumber()’, declared with attribute warn_unused_result
[-Wunused-result] Construcción finalizada: ../src/unused_return_value.cpp Destino de construcción: unused_return_value Invocando: GCC C++ Linker g++ -o "unused_return_value" ./src/unused_return_value.o Objetivo de construcción terminado: unused_return_value**** Construcción terminada ****
Podría envolver el atributo en un #define.
También estoy presionando fuertemente para usar la opción "tratar las advertencias como errores". Creo firmemente que cualquiera que pueda crear un compilador sabe más sobre el idioma que yo (tuve problemas con el Libro del dragón), por lo que nunca puedo entender cuando la gente se encoge de hombros y dice "es solo una advertencia".
También presionaré para usar un Linter. Y para que el código esté libre de advertencias de compilador y linter antes de la revisión del código (los resultados de ambos se enviarán con el código) y antes del lanzamiento al control de versiones.
¡Gracias, Steve!
Ira Baxter
Mawg dice que reincorpore a Monica
Ira Baxter
Mawg dice que reincorpore a Monica
Ira Baxter
Mawg dice que reincorpore a Monica
Ira Baxter
Mawg dice que reincorpore a Monica
malloc()
y el código continuó como si fuera exitoso. En mi opinión, la sugerencia de Steve me ayuda a detectar eso, como en el código de muestra que publiqué como respuesta. Tengo la horrible sensación de que estamos "hablando entre nosotros". ¿Qué me estoy perdiendo?Ira Baxter
Mawg dice que reincorpore a Monica
x = foo()
que x no se pruebe durante la revisión del código (pero es el tipo de código en el que no me sorprendería ver eso, por desgracia: - (Gracias por aclarar eso. Dejaré a Steve con la respuesta hasta que surja algo mejor.Ira Baxter
Mawg dice que reincorpore a Monica