Lesen Sie C- oder C ++ - Kompilierungsfehler nach dem ersten?

19

Ich habe nie verstanden, warum C- und C ++ - Compiler versuchen, Fehler zu beheben und das Parsen fortzusetzen. Fast immer erzeugt der erste Fehler einen Strom von falschen Fehlern, die verschwinden, sobald der erste behoben ist. Nach einigen Jahren Erfahrung habe ich einfach aufgehört, alle Fehler außer den ersten in jeder Datei zu untersuchen. Ich führe den Compiler erneut aus und wiederhole dies, bis keine Fehler mehr vorliegen. Ist es eine gängige Praxis?

alexk7
quelle
Ich denke, ich lese nur die ersten, aber ich arbeite nicht mit tausend Millionen Quelldatei-Lösungen, das hilft.
Coder

Antworten:

19

Manchmal hängen die Fehler nicht zusammen. Ich finde es einfacher, eine Fehlerliste anzusehen und die Ursache für eine Reihe verwandter Fehler zu beheben, und dann den nächsten nicht verwandten Fehler zu beheben . Wenn das Projekt groß ist und eine Weile dauert, finde ich es weniger frustrierend, auf diese Weise zu arbeiten, als den ersten Fehler zu beheben, neu zu kompilieren, zu wiederholen ...

FrustratedWithFormsDesigner
quelle
3
+1: Bedenken Sie, wenn das Projekt groß ist und einige Zeit in Anspruch nimmt, sollten Sie zwischen den Kompilierungen nicht zu viel ändern, damit Sie Probleme finden, die Sie relativ leicht eingeführt haben.
Donal Fellows
Ich bin damit einverstanden, dass es in dem Fall, dass Ihre Kompilierungszeit sehr lang ist, nützlich sein kann, nach anderen nicht verwandten Fehlern zu suchen, aber ich würde es vorziehen, die Abhängigkeitsprobleme zu beheben, die diese langen inkrementellen Builds verursachen ...
alexk7
8

Dies hängt von der Kompilierungszeit ab . Wenn ich beispielsweise weiß, dass ich gerade einen Master-Header geändert habe, der eine Neuerstellung des gesamten Projekts auslöst, werde ich den Rest des Fehler-Stacks genauer untersuchen und prüfen, ob ich einige davon beheben kann. Das gibt mir ein besseres Gefühl, wenn ich aufstehe, um Kaffee zu kochen, während der Compiler läuft.

Alexander Gessler
quelle
4

Ja, ich mache dasselbe, es sei denn, ich verwende den Compiler, um die Umgestaltung zu unterstützen. In diesem Fall gefällt mir die vollständige Fehlerliste :)

Stephen Bailey
quelle
Viele moderne IDEs verfügen über Refactoring-Tools, die auf Knopfdruck verfügbar sind, sodass Refactor-by-Compiler-Fehler nicht erforderlich sind, wenn Sie über Zugriff und Fähigkeiten mit solchen Tools verfügen. Es sei denn, Sie bevorzugen es ...
FrustratedWithFormsDesigner
1
Ja, aber meine primäre Arbeit IDE VS hat keine für C ++ :( Wenn es kein Tool gibt, werde ich einen Weg finden!
Stephen Bailey
1
Visual Assist X von Whole Tomato erweitert VS for C ++ um Refactoring.
Stonemetal
4

Wenn es eine Lücke in den Zeilennummern ist, der Compiler wahrscheinlich hat sich erholen und dann einen weiteren Fehler gefunden.

Normalerweise versuchen Sie jedoch nur einen Fehler in jeder Gruppe zu beheben.

Bo Persson
quelle
1

Bessere Compiler führen zu besseren Ergebnissen und liefern nach dem ersten Fehler nützlichere Fehler, häufig durch eine Art automatische Korrektur der Fehler, sodass vermutlich guter Code zumindest überprüft werden kann. Aber dann bin ich es gewohnt, in Java, in Eclipse, zu arbeiten, wo Syntax-Tippfehler sofort erkannt und leicht korrigiert werden und andere Compiler-Fehler vielfältiger und für den Compiler leichter zu beheben sind. Ich kann nur annehmen, dass es ähnlich ist, wenn ich in Microsoft-IDEs und anderen in C ++ oder C # arbeite.

Jprete
quelle
0

Ja - oder zumindest überfliege ich sie. Es ist ziemlich einfach herauszufinden, ob die Fehler zusammenhängen (normalerweise reicht ein Blick auf die Zeilennummer), und ich mag es, sie alle in einem Durchgang zu reparieren und dann neu zu kompilieren.

Nemanja Trifunovic
quelle
0

Ich mache dies (um die Fehler nach dem ersten zu lesen) nur, wenn die 1-cpp-Kompilierung sehr lang ist. Oder nicht verfügbar. Dann stelle ich lieber sicher, dass ich alles behoben habe, was ich in den Compilerfehlern als nicht mit dem ersten Fehler in Zusammenhang stehend identifizieren konnte.

Wenn Ihre cpp-Datei alleine kompiliert werden kann und dies in weniger als einer Sekunde erledigt ist (oder wenn Sie einen "Intellisense" -Punktfehler haben, bevor die Kompilierung überhaupt begonnen hat), müssen Sie dies die meiste Zeit nicht tun.

Ich arbeite derzeit an einem Projekt, in dem ich keinen einzigen CPP kompilieren kann (und ich habe nicht die Hand auf dem Build-System, so dass ich das O__o nicht ändern kann), und einige CPP-Dateien können mehr als zehn Minuten zum Kompilieren benötigen ( auch nach langwierigen bemühungen, das zu reduzieren, haben wir es nur um 50% der ursprünglichen kompilierungszeit gekürzt ...).

In dieser Art von sehr langen Kompilierungs-Setups denken Sie oft zuerst nach, bevor Sie auf "Build" klicken ... und denken sogar viel nach, um möglicherweise Fehler vor dem Compiler zu finden, da Sie sie mit Sicherheit schneller als im Kopf bekommen .

Klaim
quelle
-1

Es ist durchaus üblich, wie Sie zu tun. Normalerweise sage ich Praktikanten oder Programmieranfängern, die von der Anzahl der Fehler überwältigt sind, fast alle Fehler außer dem ersten zu ignorieren. Es handelt sich höchstwahrscheinlich um einen echten Fehler, der behoben werden muss, und nicht um einen irreführenden Phantomfehler, der durch einen vorherigen Fehler verursacht wurde. Einige (die meisten?) Compiler haben aus diesem Grund die Möglichkeit, die Kompilierung nach dem ersten Fehler abzubrechen. Build-Systeme können normalerweise so konfiguriert werden, dass sie nach der ersten fehlerhaften Datei beendet werden.

Es gibt jedoch Gründe, die Kompilierung auch nach dem Erkennen von Fehlern fortzusetzen. Beispielsweise möchten Sie möglicherweise ermitteln, wie viele Dateien Fehler aufweisen, oder feststellen, ob eine enthaltene Headerdatei Fehler in mehreren Dateien verursacht.

Destenson
quelle