2016-08-01 7 views
0

Ich habe diese Zeilen im Präprozessor-Ausgang.Preprozessor-Ausgabefelder

......

  • 1 "test.c"
  • 1 "/usr/include/stdio.h" 1 3 4
  • 27 „/ usr/include/Stdio .h“3
  • 4 1 "/usr/include/features.h" 1 3 4
  • 374 "/usr/include/features.h" 1 3 4

..... .

Ich habe erfahren, dass in Zeile 27 in stdio.h gibt es einen Aufruf, features.h einzuschließen, aber was die anderen Zahlen 1,3,4 in beiden Zeilen definiert. kann mir jemand erklären, was genau diese verschiedenen Felder wenig aufwändig bedeutet.

wie Sie sehen

1 "/usr/include/stdio.h" 1 3 4

27 "/usr/include/stdio.h" 3 4

warum zwei Einbeziehung von stdio.h oder wenn ich falsch liege, was bedeutet das?

Antwort

0

Von gcc documentation:

Quelldateinamen und die Zeilennummer Information wird von Linien von die Form gefördert

# linenum Dateiname Flaggen

Diese sind linemarkers genannt. Sie werden bei Bedarf in die Ausgabe eingefügt (aber niemals innerhalb einer Zeichenkette oder Zeichenkonstante). Sie bedeuten, dass die folgende Zeile in Datei Dateiname bei Zeile lineum entstanden ist. Dateiname enthält niemals nicht druckbare Zeichen; sie werden durch oktale Escape-Sequenzen ersetzt.

nach dem Dateinamen kommt null oder mehr Flags, die ‚1‘ sind, ‚2‘, ‚3‘, oder ‚4‘. Wenn mehrere Flags vorhanden sind, werden sie durch Leerzeichen getrennt. Hier ist was die Flags bedeuten:

'1' Dies zeigt den Beginn einer neuen Datei an.

'2' Dies bedeutet, dass Sie zu einer Datei zurückkehren (nachdem Sie eine andere Datei hinzugefügt haben).

'3' Dies zeigt an, dass der folgende Text aus einer System-Header-Datei stammt, daher sollten bestimmte Warnungen unterdrückt werden: .

'4' Dies bedeutet, dass der folgende Text so behandelt werden sollte, als wäre er in einen impliziten externen "C" -Block eingeschlossen.

+0

Danke. so von oben erklärt es, dass 1 "test.c" definiert, dass die Zeile darunter von test.c in Zeile 1 stammt. Also die nächste Zeile 1 "/ usr/include/stdio.h "1 3 4 gibt an, dass dies der Anfang einer neuen Datei ist und die Zeile unten von" /usr/include/stdio.h "in Zeile 1 mit Systemheadern stammt und als in einen impliziten externen C-Block eingeschlossen behandelt werden sollte ? Aber ist 1 "/usr/include/stdio.h" 3 4 Zeile wirklich aus der Zeile 1 von "/usr/include/stdio.h" entstanden? .. –

+0

Ich versuche es buchstäblich zu verstehen, aber ich bin etwas verwirrt, dass das gleiche 1 "/usr/include/stdio.h" 3 4 stammt aus der Datei /usr/include/stdio.h, Wie? –