Me interesa una herramienta gratuita que pueda verificar estáticamente mi código C++ como lo hace Lint. ¿Algún consejo?C/C++ ¿Alternativa libre a Lint?
Respuesta
Trate cppcheck
, encuentran aquí: http://cppcheck.sourceforge.net/
He aquí una muestra de algunos de los controles que puede realizar o que yo he utilizado para:
- índices de matriz fuera de límites
- de memoria/resource leaks
- Improved new/delete
- Falla en poner destructores virtuales en las clases derivadas
- asignación no coincidente y cancelación de asignación
- desasignación de un puntero desasignado
- Usando variable después de que se cancela la asignación/liberado
- Tamaño no coincide con
- radix no válida en llamada a
strtol
ostrtoul
- La superposición de los buffers de datos
- sin signo división; resultado puede ser mal
- puntero Unusual aritmética
- Volviendo puntero a variable de matriz local de
- Same iterador se utiliza con dos contenedores
- de uso peligroso de borrado
- Después de retroceso o pushfront, iterador puede ser no válida
- Buffer desborda
- uso peligroso de
strncat
, posible tampón invadido
+1 para CppCheck. ¡Gran herramienta! Solo tenga en cuenta que * siempre * devuelve un código distinto de cero si detecta * cualquier * problema (incluso el estilo si están configurados). Si está utilizando un sistema de compilación automatizado, esto puede marcar las compilaciones como fallidas. – MattyT
¿Reemplaza la pelusa o es una adición? – To1ne
@ To1ne: _lint_ es para el código C, _cppcheck_ es para el código C++. –
splint se confunde con la sintaxis "más reciente", donde "más nuevo" son las convenciones de C++ que se han retrotraído a C en el último 10 años. –
Upps, ¿así que la férula es c solamente? – Johan
Sí, la férula es solo C, y por mi experiencia no hace mucho de lo que hace un GCC/Clang reciente. Aunque YMMV. – ideasman42
Tal vez una lista como esta es lo que está buscando:
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
splint no es compatible con C++ –
ah, ese es un buen punto. Desearía haberlo notado antes. –
splint es realmente inútil a menos que tenga una delineación clara entre el código C y C++, ya que la convención de usar .h para el sufijo de ambos encabezados C y C++ significa que la férula arrojará alegremente toneladas de advertencias sobre ese archivo .h completo de plantillas, clases, etc. que le indicó que escaneara con '* .h'. –
Es posible que desee echa un vistazo a este proyecto:
- Vera++ basa en reglas definidas por el usuario (escrito en Tcl, Python, o LUA)
Y pocos que no están libres los:
- QAC++
- Coverity
- Klocwork
- Abraxas CodeCheck - heard several opinions ...
Pruebe nsiqcppstyle, un comprobador de estilo C++ escrito en python.
Personalmente probé cppcheck (v1.4) y me pareció imposible.
por ejemplo. Este ejemplo se detectó correctamente para matriz fuera de límites:
int a[4];
for (int n = 0; n < 5; n++)
{
a[n] = n;
}
Pero no se detectó este ejemplo:
int a[4];
int z = 4 + 1;
for (int n = 0; n < z; n++)
{
a[n] = n;
}
(error) Acceso al búfer fuera de límites: a – Beginner
Esta respuesta ya no es verdadera (1.82), dos advertencias ahora: "[test.cpp: 6]: (error) Array 'a [4]' a la que se accede en el índice 4, que está fuera de límites. [test.cpp: 6]: (estilo) A la variable 'a' se le asigna un valor que nunca se usa. ". – Zitrax
Otra herramienta para la lista: Google cpplint.py, que ++ estilo de Google C guía mentions. Es muy específico de Google, pero no obstante.
Cabe señalar que cpplint.py de Google comprueba principalmente las violaciones de _su_ estilo de codificación que pueden coincidir o no con el estilo que está siguiendo. –
@Matt Briançon, las quejas de estilo de cpplint me molestan, especialmente porque combinan preocupaciones no relacionadas (donde se coloca el corchete es una cuestión de gusto, * no * un problema de calidad), pero me parece valioso usarlo solo para los cheques de encabezado (no utilizado/innecesario, faltante, etc.). Sigo pensando que debería bifurcarlo no solo para separar las preocupaciones, sino para hacerlo más configurable (opciones de CLI para deshabilitar/modificar verificaciones de estilo, etc.). –
Mi cheque favorito de cpplint.py de Google está en la categoría 'runtime/explicit', específicamente el cheque para constructores de argumento único que no están marcados' explicit'.Esto detecta errores reales en código real y no da muchos "falsos positivos". –
- 1. ¿Alternativa libre a Targetprocess?
- 2. NoSQL alternativa libre (alternativa a ravendb) para C# desarrollo
- 3. ¿Alternativa libre a la asistencia visual?
- 4. Código abierto/Alternativa libre de Typemock Isolator
- 5. CruiseControl - PHP lint cheque funciona a través de ANT pero no a través de CruiseControl
- 6. Android Lint contentDescripción advertencia
- 7. ¿Qué es call/cc?
- 8. PHP Mail, CC Field
- 9. Detalles de call/cc
- 10. Android Eclipse Lint API comprueba
- 11. Invocando a GCC como "cc" frente a "gcc"
- 12. ¿Hay alguna herramienta XSL Lint?
- 13. patrones "call-cc" en Scala?
- 14. ¿Existe una alternativa simple a Readline?
- 15. cómo convertir un cc de opencv :: Mat a qimage
- 16. alternativa seleccionable a JOptionPane.showMessageDialog
- 17. alternativa a cron?
- 18. ¿Alternativa a Dreamweaver?
- 19. Alternativa a Response.End()?
- 20. ¿Alternativa a Gridster?
- 21. ¿Bastante alternativa a JProgressBar?
- 22. alternativa a awk
- 23. alternativa a String.Replace
- 24. Android alternativa a MetroGridHelper
- 25. Alternativa gratuita a RegexBuddy
- 26. Alternativa a MFC
- 27. Alternativa a crypt()
- 28. ¿Alternativa a la gitosis?
- 29. Alternativa a IETester
- 30. Alternativa ligera a Sammy.js
Esta pregunta SO tiene respuestas relevantes: [¿Cuál es la mejor herramienta de línea de comando para limpiar el código?] (Http://stackoverflow.com/questions/393208/what-is-the-best-command-line- tool-to-clean-up-code) –
https://github.com/facebookarchive/flint – Jimbo