Was bedeuten Zeilen, die mit einem Hash-Zeichen und einer Zahl wie ‘# 1 “ac”‘ in der Ausgabe des gcc-Präprozessors beginnen?

Lesezeit: 1 Minute

Benutzeravatar von user607722
Benutzer607722

Ich drucke die Ausgabe des C-Präprozessors mit aus

gcc -E a.c

Die Ausgabe enthält viele Zeilen wie

# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.c"
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 1 3
# 19 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 3
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 1 3
# 31 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
       
# 32 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 20 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 2 3

Ich habe diese Art von Syntax noch nie in C gesehen. Kann jemand erklären, was das tut?

  • Wie man sie loswird: stackoverflow.com/questions/2946898/…

    – Ciro Santilli OurBigBook.com

    17. Januar 2016 um 11:55 Uhr

Diese Zeilen sind Hinweise zum Debuggen (woher der Code nach der Zeile tatsächlich stammt)

# line-number "source-file" [flags]

Bedeutung der Flags (Leerzeichen getrennt):

  • 1 – Beginn einer neuen Datei
  • 2 – Rückkehr zur vorherigen Datei
  • 3 – Der folgende Text stammt aus einer System-Header-Datei (#include <> vs. #include “”)
  • 4 – Der folgende Text sollte so behandelt werden, als wäre er in einen impliziten externen “C”-Block eingeschlossen.

Benutzeravatar von uvsmtid
uvsmtid

Diese Linienmarkierungen darin erwähnt sind man gcc zum -P Möglichkeit.

Das -P Die Option ist speziell dazu gedacht, diese Zeilen der Übersichtlichkeit halber zu entfernen:

gcc -E -P source.c

Sehen ausführliche Dokumentation (vorher beantwortet).

Das sind Zeilensynchronisationsdirektiven, die es erlauben gcc um korrekte Fehlermeldungen für Fehler in zu geben #included-Dateien. Andere Präprozessoren (wie z yacc/bison) verwenden denselben Mechanismus, um C-Fehler den richtigen Zeilen in der Eingabe zuzuordnen .y Datei.

  • Nein, andere C-Code-Generatoren mögen bison aussenden soll #line Präprozessordirektiven….

    – Basile Starynkevitch

    19. Juli 2015 um 9:11 Uhr

1415760cookie-checkWas bedeuten Zeilen, die mit einem Hash-Zeichen und einer Zahl wie ‘# 1 “ac”‘ in der Ausgabe des gcc-Präprozessors beginnen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy