IDE para c++/linux que detecta código cuestionable

Estoy usando emacs como mi único editor de programación. Pero recientemente he estado luchando durante horas con problemas que, al final, resultaron ser simples errores de mi parte. Por ejemplo, escribiendo if(n < n)en lugar de if(n < N)o declarando la función como bool en lugar de doble:

bool foo() {
   return 0.5;
}

Ni gcc -Wallni emacs pudieron detectar esos problemas.

¿Hay algún IDE que pueda hacer esto? Debería

  • trabajar en linux
  • se libre
  • ser capaz de mostrar varios problemas en el código, no solo errores de sintaxis

Además me encantaría

  • utilizable en pantallas pequeñas (posible enfocarse en una sola ventana y ocultar todas las barras de título/menús/iconos...)
  • reconocer combinaciones de teclas de emacs
¿Sería una ventaja si le dice que use nombres de variables significativos? ;-)

Respuestas (3)

Dado que ya está utilizando emacs, me pregunto si sería preferible instalar uno de los muchos linters de código abierto en lugar de un IDE. Esa forma probablemente sea más flexible que un IDE, y puede permanecer en su One True Editor.

Para C++, hay estos linters para elegir:

Si aún no está conectado a su editor, Vim tiene Syntastic para integrarlos de modo que su archivo se verifique automáticamente mientras escribe o cuando guarda.

Varios de estos saben cómo generar resultados listos para Emacs.

Desafortunadamente, en mi sistema, ni gcc, clang_check ni cpplint se quejaron de sus dos casos de prueba. Incluso con g++ -ansi -pedantic -Wall -Wextra -Weffc++.

De la lista anterior, cppcheck podría ser el que tenga más probabilidades de detectar sus casos de prueba, ya que es una herramienta de análisis estático ("no es un compilador", como dicen en los documentos).

De hecho, captó su n<ncaso:

$ cppcheck --enable=all test.cc
[test.cc:17] -> [test.cc:17]: (style) Same expression on both sides of '<'.

Tal vez un programador de C ++ pueda intervenir aquí por qué devolver algo que no sea el bool declarado en su caso de prueba no es algo de lo que las herramientas canten en voz alta.

Cada linter/compilador enumerado anteriormente tiene una gran variedad de opciones; tal vez su sensibilidad se pueda aumentar para detectar ambos casos.

Me doy cuenta de que solicitó un IDE, pero un buen editor con complementos y una buena configuración a veces es indistinguible de un "IDE".

Le sugiero que al menos pruebe algo como un software de análisis de código estático como c++ linter .

Aunque resuelve en parte su problema, encontré que tales programas exigen estándares muy altos y, por lo tanto, son muy estresantes de usar al principio. Además, según esa publicación, tiene problemas para detectar configuraciones más complicadas.

Gracias toogley. También estoy pensando que lo que necesito no tiene que ser ide, pero bien puede ser una aplicación independiente a la que puedo enviar mi código (incluso basado en la web) cuando me encuentro con diferentes problemas.
@OttToomet Algunos de ellos también se pueden integrar con IDE'S. Por ejemplo, para eclipse

¿Vim/Neovim?

ingrese la descripción de la imagen aquí


Pero antes que nada, los analizadores estáticos tienen su lugar y no se adaptan bien al editar su archivo. Ejecútelos cuando haya realizado sus ediciones y antes de confirmar su código, por lo tanto, elimine cualquier error ingenioso común que pueda haberse deslizado en su código. Echa un vistazo a oclint , cppcheck , clangcheck , clang-tidy , clang-static-analyzer .


Puedo mencionar muchos complementos para mejorar su flujo de trabajo, pero uno que es esencial es YouCompleteMe . ¿Ves esas marcas de cruz rojas en el búfer más a la izquierda? Esos se actualizarán en segundo plano a medida que escribes y te dirán dónde podrías haber cometido un error.


YouCompleteMe es un motor de finalización de código rápido, a medida que escribe y de búsqueda aproximada para Vim. Tiene varios motores de finalización:

  • un motor basado en identificadores que funciona con todos los lenguajes de programación,
  • un motor basado en Clang que proporciona finalización de código semántico nativo para C/C++/Objective-C/Objective-C++ (de ahora en adelante denominado "los lenguajes de la familia C"),

  • un motor de finalización basado en Jedi para Python,

  • un motor de finalización basado en OmniSharp para C#,

  • un motor de finalización basado en Gocode para Go,

  • un motor de finalización basado en TSServer para TypeScript,

  • un motor de finalización basado en Tern para JavaScript.

  • y un completador basado en omnifunc que usa datos del sistema omnicompleto de Vim para proporcionar completados semánticos para muchos otros lenguajes (Ruby, PHP, etc.).

ingrese la descripción de la imagen aquí