¿Alguna herramienta para detectar errores tontos en el código C?
Pregunta
Tuve un error tipográfico desagradable que desperdició mi tiempo y el de mi colega, fue algo como esto:
for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
{
// Some awesome logic here
}
En primer lugar, es muy embarazoso, en segundo lugar, nunca debería repetir esto. Soy relativamente nuevo en C. En Java, creo que puedo usar FindBugs para detectar errores como estos, lo que ¿Qué herramienta debo usar para el código C? ¿Pelusa?
Solución
Sí, PC-Lint es probablemente la mejor herramienta disponible.
Otros consejos
Además de sugerencia PC-Lint de Lykathea , también puede obtener diagnósticos mejores (o al menos más) si aumenta el nivel de advertencia del compilador. Algo como / W4
o -Wall
Aunque no estoy seguro de si su problema en particular hubiera sido detectado con esto (MS VC no parece marcarlo incluso con todas las advertencias habilitadas). Creo que eso se debe a que no es un lenguaje poco común para que para
los bucles estén vacíos cuando el trabajo se realiza como efectos secundarios de las expresiones de control de bucle.
Algunas cosas que me han salvado en el pasado, desde lo alto de mi cabeza:
-
Use if (3 == bla) en lugar de (bla == 3) , porque si escribe incorrectamente y escribe (3 = bla) el compilador se quejará.
-
Use el interruptor todas las advertencias . Su compilador debería advertirle sobre declaraciones vacías como esa.
-
Use aserciones cuando pueda y programe a la defensiva. Haga un buen esfuerzo para hacer que su programa falle antes, verá las debilidades de esa manera.
-
No intente eludir las salvaguardas que el compilador o el sistema operativo han puesto en práctica. Están allí para su facilidad de programación también.
También vea análisis estático de errores
GCC tiene la mayor parte de la funcionalidad que Lint ha incorporado a través de advertencia banderas .
Cualquier buen entorno de programación GUI (" IDE " - Ambiente de desarrollo integrado) como Eclipse generaría una advertencia en un caso como ese.
Un buen resaltador de sintaxis hará que algunos casos como este sean más visibles.
Le sugeriría que vea si tiene la capacidad de hacer cumplir los estándares de MISRA . Fueron escritas con gran pensamiento y muchas reglas que son simples para que un compilador las compruebe. Por ejemplo, una regla que uso requiere que todos los comandos NOP tengan su propia línea. Esto significa que cuando pones un; Al final de una instrucción de bucle, aparecerá un error que indica que no está en su propia línea.
QA & # 183; C de Programming Research es otra buena herramienta de análisis estático para C.
En esta (antigua) versión de Cómo dispararse En el Pie , y en muchas otras versiones en la web, C es siempre el lenguaje que permite el procedimiento más sencillo. Al programar en C , debes recordar esto y tener cuidado. Si desea protección, elija otro idioma.
Este dicho es atribuido a Bjarne Stroustrup (C ++) a sí mismo. Para (mal) citar:
" C hace que sea más fácil dispararte en el pie "