Sind Tokens nach #endif legal?

8

Ich mache derzeit folgendes und der Compiler (MSVC2008 / wie auch 2010) beschwert sich nicht darüber, aber ich bin mir nicht sicher, ob es eine schlechte Idee ist oder nicht:

%Vor%

Ich habe es immer als #endif // FOO_H_ geschrieben, aber ich habe mich dabei ertappt, dass ich das heute nicht gemacht habe und dachte, dass es seltsam ist, weil ich die Kommentarmethode anscheinend eine Zeit lang nicht gemacht habe.

Ist das eine schlechte Übung, dass ich alle meine Header zurückverfolgen und beheben sollte (es ist eine Cross-Plattform-Anwendung) oder ist es okay, es so zu lassen, wie es ist?

    
Joe.F 11.08.2010, 18:43
quelle

4 Antworten

6

Streng genommen (gemäß der Grammatik im Standard) sind keine Token erlaubt, die der #endif Direktive in derselben Zeile folgen (Kommentare sind in Ordnung, da sie in einer früheren Phase der Übersetzung entfernt werden als die Vorverarbeitungs-Direktiven - Phase 3 vs 4).

Aber MSVC scheint es zu erlauben - ich würde nicht auf eine Suche gehen, um diese zu beheben (da sie kein Problem verursachen), aber würde wahrscheinlich eine mentale Notiz machen, sie zu reparieren, wenn Sie die Header modifizieren sie.

Natürlich, wenn Ihre anderen unterstützten Compiler Diagnosen über sie ausgeben, ist es wahrscheinlich dringender, sie zu beheben.

    
Michael Burr 11.08.2010, 18:48
quelle
5

Es ist nicht ok, es ist nicht gültig, AFAIK. Viele Compiler ignorieren den zusätzlichen Text nach dem #endif und oft warnen sie davor. Sie sollten das // hinzufügen, um es zu einem Kommentar zu machen.

    
wilx 11.08.2010 18:46
quelle
4

Mit dem, was alle anderen gepostet haben, habe ich mir gedacht, dass ich Ihnen vielleicht dabei helfen könnte, das Problem zu korrigieren. (Angenommen, es ist in vielen Dateien.)

Sie können die Funktion Suchen und Ersetzen in Visual Studio verwenden, um alle problematischen Zeilen gleichzeitig zu korrigieren. Setzen Sie einfach Find What: auf "\#endif {[a-zA-Z\.\_]+}$" und Ersetzen durch: auf "#endif //" (und stellen Sie sicher, dass Sie Use: [Regular Expressions] unter den Find-Optionen aktiviert haben.)

Und tun Sie das für die gesamte Lösung und Sie sollten gut gehen.

(Bitte sichern Sie zuerst Ihr Projekt, ich habe es getestet und es scheint als würde es funktionieren, aber verwenden Sie dies auf eigene Gefahr.)

    
TJMonk15 11.08.2010 19:00
quelle
1

Warum sollte Ihr Compiler Sie davor warnen?

Sagen Sie, Ihre Header-Datei ist wie folgt:

%Vor%

Jetzt schließen Sie das aus der Quelle ein

%Vor%

Wenn der Compiler die Datei technisch enthält, sollte die erweiterte Quelle wie folgt aussehen

%Vor%

Die meisten modernen Compiler berücksichtigen, dass dies passieren könnte und stecken ein zusätzliches EOL-Token auf die enthaltenen Dateien, um dies zu verhindern (technisch nicht erlaubt, aber ich kann mir keine Situation vorstellen, in der es ein Problem verursachen würde).

>

Das Problem ist, dass einige ältere Compiler dieses zusätzliche Token nicht bereitstellen (mehr Standards konform), aber als Ergebnis können Sie möglicherweise den oben genannten Code kompilieren (als Ergebnis neigen sie dazu, Sie vor zwei Dingen zu warnen) EOL in Quelldateien und 2) Dinge nach dem #endif

    
Martin York 11.08.2010 20:44
quelle