tutorial c++ c code-analysis lint

tutorial - C/C++ ¿Alternativa libre a Lint?



cppcheck (8)

Estoy interesado en una herramienta gratuita que pueda verificar estáticamente mi código C ++ como lo hace Lint. ¿Algún consejo?



Es posible que desee verificar este proyecto:

  • Vera++ basado en reglas definidas por el usuario (escritas en Tcl, Python o Lua)

Y pocos no libres :


Otra herramienta para la lista: Google cpplint.py , que mentions guía de estilo C ++ de Google. Es muy específico de Google, pero no obstante.


Personalmente probé cppcheck (v1.4) y lo encontré sin esperanza.

p.ej. Este ejemplo se detectó correctamente para la matriz fuera de límites:

int a[4]; for (int n = 0; n < 5; n++) { a[n] = n; }

Pero este ejemplo no fue detectado:

int a[4]; int z = 4 + 1; for (int n = 0; n < z; n++) { a[n] = n; }


Prueba nsiqcppstyle , un verificador de estilo C ++ escrito en python.


Recientemente leí sobre DeHydra y Pork utilizados por Mozilla, aunque no lo he probado yo mismo.



Pruebe cppcheck , que se encuentra aquí: http://cppcheck.sourceforge.net/

Aquí hay una muestra de algunos de los controles que puede realizar o para los que los he usado:

  • Los índices de matriz están fuera de los límites
  • Fugas de memoria / recursos
  • Impropio nuevo / eliminar
  • No poner destructores virtuales en las clases derivadas
  • Asignación y desasignación no coincidentes
  • Desasignación de un puntero desasignado
  • Usar la variable después de ser desasignada / liberada
  • Discrepancias de tamaño
  • Raíz inválida en llamada a strtol o strtoul
  • Búfers de datos superpuestos
  • División sin firmar; el resultado puede ser incorrecto
  • Aritmética de puntero inusual
  • Devolución del puntero a la variable de matriz local
  • El mismo iterador se usa con dos contenedores
  • Uso peligroso de borrar
  • Después de pushback o pushfront, el iterador puede ser inválido
  • Sobrecarga de búfer
  • Uso peligroso de strncat , posible desbordamiento de búfer