Herramienta de análisis de código estático para proyectos multiplataforma con buena cobertura de las características de C++11

Soy un desarrollador de C++ de la vieja escuela y aún hoy no tengo experiencia profesional en C++11 . Confío en el comité de C++ en que el lenguaje se está moviendo en la dirección correcta, pero parece que en los proyectos en los que trabajo el escepticismo es dominante y muchas de las características de C++11 están prohibidas incluso antes de que se entiendan y exploren.

De todos modos, ahora tengo la oportunidad de trabajar en una nueva base de código y me gustaría aplicar todo el poder de C++11, pero no quiero pegarme un tiro en el pie.

En el pasado, descubrí que algunas de las herramientas de análisis de código estático eran instrumentos de enseñanza extremadamente poderosos para mostrarme todos estos aspectos sutiles del lenguaje.

Para mi proyecto, uso bibliotecas clang y portátiles como STL y Boost que se basan en Windows, Linux, Mac y más.
Esperaba que clang-tidy , clang-modernize , etc. fueran buenas herramientas que me permitieran adaptar mi comportamiento a la característica de C++ 11, pero parecen brindar una ayuda muy limitada; literalmente, me tomó de 2 a 3 días adaptarme. a todas las sugerencias que hacen... y estoy seguro de que hay muchas posibilidades que me estoy perdiendo según las referencias de rvalue , por ejemplo.

Algunas características que me gustaría que tuviera:

  • Cuando la elisión de copia no es suficiente, la interfaz de reenvío proporcionará optimización.

  • Cuando algunos de los miembros de la clase no son móviles, no es posible generar automáticamente el constructor de movimientos y el operador de asignación de movimientos.

  • Cuando la variable local podría moverse si esta es la última referencia en su ámbito.

  • Cuando const auto&es mejor terminar auto.

No tengo límites de precio.

¡Bienvenido a Recomendaciones de software! No está muy claro lo que estás pidiendo. Eche un vistazo a ¿Qué se requiere para que una pregunta contenga "suficiente información"? Luego edite su pregunta y vea si puede incorporar algunas de estas mejoras.
@lzzy Estoy buscando: "herramienta de análisis de código estático con buena cobertura de características de c ++ 11"
Eso es un poco "demasiado amplio", me temo. ¿Has comprobado con el enlace de mi último comentario? Faltan muchos detalles en su pregunta, por ejemplo, en qué sistema operativo debe ejecutarse, cuál es su presupuesto. Posiblemente más, pero cuando se trata de características, debo pasar, ya que esa no es mi área de especialización.
@lzzy: la pregunta está en espera porque "no está clara", pero en su comentario es demasiado amplia, lo cual es. Siento que si doy algo más específico, tendré que dar la respuesta yo mismo.
@gsf Especifique claramente en qué sistema operativo debe ejecutarse. Una " herramienta para proyecto multiplataforma " puede malinterpretarse. ¿Desarrollas en Windows? Es posible que tenga algo que sugerir una vez que sus preguntas ya no estén en el estado "poner en espera".
@mguassa Uso clang y bibliotecas portátiles como stl y boost que se construyen en Windows, Linux, Mac y más.
Me gusta mucho tu pregunta y espero ver una respuesta. ¿Podría intentar darnos más información y votaremos para reabrir? ¿Qué pasa con una lista de características? ¿Y te importa cuál o/s?
@Mawg No sé qué características exactas debería proporcionar la herramienta, doy 3 párrafos explicando por qué. Si tengo que convertirme en un experto en el área para hacer una pregunta, ¿cuál es el objetivo del sitio web? Algo está completamente mal aquí.
Por favor, ¿alguien puede votar para reabrir la pregunta? Creo que es lo suficientemente claro para que las personas proporcionen algunas respuestas.

Respuestas (2)

En el pasado, para el código C/C++ de la vieja escuela, usaba PC-lint , un software comercial desarrollado por Gimpel Software.

De hecho, la compañía desarrolla un par de herramientas de análisis estático: PC-lint y FlexeLint .
Pc-lint es para sistemas Windows, mientras que FlexeLint se ejecuta en casi todos los sistemas que admiten C, incluidos VMS, OS-9 y prácticamente todos los sistemas Unix.

PC-lint y FlexeLint son poderosas herramientas de análisis estático que verificarán su código fuente C/C++ y encontrarán errores, fallas, inconsistencias, construcciones no portátiles, código redundante y mucho más. Se ve en varios módulos y, por lo tanto, disfruta de una perspectiva que su compilador no tiene.

Con respecto al soporte de C++ 11, tienen una página dedicada para ello:
Soporte PC-lint / FlexeLint para C++ 11

Full support for C++11 and C++1y is our primary focus and while we cannot provide a date for full support we anticipate a quicker release cycle as we roll-out support for the remaining features.

So, at this time of writing, they don't support all the C++11 features, but most of them seem to be there. What I like is that the development status of the features is clearly and transparently reported on that page, along with a priority (for other tools, such information doesn't seem to be that clear or easily available).
For example, in your question you mentioned rvalue, which appears to be supported:

  • Language feature: Rvalue references
  • C++11 Proposal: N2118
  • Available n PC-Lint/FlexeLint?: Lint 9.00c

Con base en la información que puedes encontrar en el sitio web y en esa página, el costo involucrado y tu proyecto, puedes evaluar si es una herramienta que puede ajustarse a tus necesidades. Otros pueden conocer otras herramientas, esta es la que te sugiero que eches un vistazo.

Finalmente, se puede encontrar una lista de otras herramientas para el análisis de código estático C/C++ en Wikipedia . No todos son compatibles con C++11.

Gracias, esto parece más un "no tenemos problemas de compilación con estas características", que "tenemos un buen conjunto de consejos para estos problemas". ¿Tiene alguna observación personal en este aspecto?
@gsf Honestamente, nunca he usado ninguna de las funciones de C++ 11, solo usé ese producto en el pasado para el código C/C++ de la vieja escuela y siento que puedo recomendarlo. Que yo sepa, por lo que he visto últimamente y por la petición específica que tienes, no parece haber mucho por ahí. Habiendo usado el producto antes, y mirando el esfuerzo que parecen poner en el soporte de C++ 11 ahora, lo que he sugerido parece una de las mejores opciones disponibles. Tenga en cuenta que no tengo ninguna relación con esa empresa.

Puedes probar CppDepend , una herramienta de análisis estático bastante completa que integra una amplia gama de características, y 100% integrada a Visual Studio.

Parece que CppDepend usa clang-modernize, que es algo que el OP ya intentó. Ver modernizador CppDepend .