IDE für C++/Linux, die fragwürdigen Code erkennt

Ich verwende emacs als meinen einzigen Programmiereditor. Aber in letzter Zeit kämpfe ich stundenlang mit Problemen, die sich am Ende als einfache Fehler meinerseits herausstellten. Schreiben Sie beispielsweise if(n < n)anstelle von if(n < N), oder deklarieren Sie die Funktion als bool statt double:

bool foo() {
   return 0.5;
}

Weder gcc -Wallnoch emacs konnten diese Probleme erkennen.

Gibt es eine IDE, die das kann? Es sollte

  • unter Linux arbeiten
  • sei frei
  • in der Lage sein, verschiedene Probleme im Code anzuzeigen, nicht nur Syntaxfehler

Außerdem würde ich mich freuen

  • verwendbar auf kleinen Bildschirmen (es ist möglich, sich auf ein einzelnes Fenster zu konzentrieren und alle Titelleisten/Menüs/Icons auszublenden...)
  • Emacs-Tastenbelegungen erkennen
Wäre es ein Bonus, wenn es Sie auffordert, aussagekräftige Variablennamen zu verwenden? ;-)

Antworten (3)

Da Sie bereits Emacs verwenden, frage ich mich, ob das Anbringen eines der vielen Open-Source-Linters einer IDE vorgezogen werden könnte? Das ist wahrscheinlich flexibler als eine IDE, und Sie bleiben in Ihrem One True Editor.

Für C++ stehen diese Linters zur Auswahl:

Wenn Sie noch nicht an Ihren Editor angeschlossen sind, hat Vim Syntastic, um diese zu integrieren, sodass Ihre Datei automatisch überprüft wird, während Sie tippen oder wenn Sie speichern.

Einige von ihnen wissen, wie man Emacs-fähige Ausgaben generiert.

Leider haben sich auf meinem System weder gcc, clang_check noch cpplint über Ihre beiden Testfälle beschwert. Sogar mit g++ -ansi -pedantic -Wall -Wextra -Weffc++.

Aus der obigen Liste ist cppcheck möglicherweise dasjenige, das Ihre Testfälle am ehesten erfasst, da es sich um ein statisches Analysetool handelt ("kein Compiler", wie es in der Dokumentation heißt).

Tatsächlich hat es Ihren n<nFall erfasst:

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

Vielleicht kann ein C++-Programmierer hier eingreifen, warum die Rückgabe von etwas anderem als dem deklarierten bool in Ihrem Testfall nichts ist, worüber Tools lautstark krähen.

Jeder der oben aufgeführten Linter/Compiler hat unzählige Optionen - vielleicht kann ihre Empfindlichkeit erhöht werden, um beide Fälle zu erfassen.

Mir ist klar, dass Sie nach einer IDE gefragt haben, aber ein guter Editor mit Plugins und einem guten Setup ist manchmal nicht von einer "IDE" zu unterscheiden.

Ich würde Ihnen vorschlagen, zumindest etwas wie eine statische Codeanalysesoftware wie c++ linter auszuprobieren .

Obwohl es Ihr Problem teilweise löst, fand ich solche Programme, die sehr hohe Anforderungen stellen und daher am Anfang sehr stressig zu bedienen sind. Außerdem hat es laut diesem Beitrag Probleme, kompliziertere Setups zu erkennen.

Vielen Dank Toogley. Ich denke auch, dass das, was ich brauche, nicht ide sein muss, sondern eine eigenständige Anwendung sein kann, in die ich meinen Code einspeisen kann (sogar webbasiert), wenn ich auf verschiedene Probleme stoße.
@OttToomet Einige von ihnen können auch in IDEs integriert werden. ZB für Sonnenfinsternis

Vim/Neovim?

Geben Sie hier die Bildbeschreibung ein


Aber vor allem haben statische Analysatoren ihren Platz und sind nicht gut geeignet, wenn Sie Ihre Datei bearbeiten. Führen Sie sie aus, wenn Sie Ihre Änderungen vorgenommen haben und bevor Sie Ihren Code festschreiben, und entfernen Sie so alle gängigen raffinierten Fehler, die sich möglicherweise in Ihren Code eingeschlichen haben. Werfen Sie einen Blick auf oclint , cppcheck , clangcheck , clang-tidy , clang-static-analyzer .


Ich kann viele Plugins nennen, um Ihren Workflow zu verbessern, aber eines, das wesentlich ist, ist YouCompleteMe . Sehen Sie diese roten Kreuzmarkierungen am Puffer ganz links? Diese werden während der Eingabe im Hintergrund aktualisiert und sagen Ihnen, wo Sie möglicherweise einen Fehler gemacht haben.


YouCompleteMe ist eine schnelle Code-Vervollständigungsmaschine für Vim, während Sie tippen, und die Fuzzy-Suche durchführt. Es hat mehrere Completion Engines:

  • eine kennungsbasierte Engine, die mit jeder Programmiersprache funktioniert,
  • eine Clang-basierte Engine, die eine native semantische Codevervollständigung für C/C++/Objective-C/Objective-C++ bietet (im Folgenden als „die Sprachen der C-Familie“ bezeichnet),

  • eine Jedi-basierte Vervollständigungs-Engine für Python,

  • eine OmniSharp-basierte Vervollständigungs-Engine für C#,

  • eine Gocode-basierte Vervollständigungs-Engine für Go,

  • eine TSServer-basierte Vervollständigungs-Engine für TypeScript,

  • eine Tern-basierte Vervollständigungs-Engine für JavaScript.

  • und ein omnifunc-basierter Vervollständiger, der Daten aus dem omnicomplete-System von Vim verwendet, um semantische Vervollständigungen für viele andere Sprachen (Ruby, PHP usw.) bereitzustellen.

Geben Sie hier die Bildbeschreibung ein