cpp – Online in der Cloud

Dies ist der Befehl cpp, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


cpp - Der C-Präprozessor

ZUSAMMENFASSUNG


cpp [-DMakro[=definiere]...] [-UMakro]
[-Idir...] [-Ich zitieredir...]
[-Wwarnen...]
[-M|-MM] [-Mg] [-MF Dateinamen]
[-MP] [-MQ Ziel...]
[-MT Ziel...]
[-P] [-fno-Arbeitsverzeichnis]
[-x Sprache] [-std=Standard]
im Ordner Outfile

Hier sind nur die nützlichsten Optionen aufgeführt; den Rest siehe unten.

BESCHREIBUNG


Der C-Präprozessor, oft bekannt als cpp, Ist ein Makro Prozessor das wird automatisch verwendet von
den C-Compiler, um Ihr Programm vor der Kompilierung zu transformieren. Es heißt Makro
Prozessor, weil Sie damit definieren können Makros, das sind kurze Abkürzungen für länger
Konstrukte.

Der C-Präprozessor soll nur mit C-, C++- und Objective-C-Quellcode verwendet werden.
In der Vergangenheit wurde es als allgemeiner Textprozessor missbraucht. Es wird an der Eingabe ersticken, die
befolgt nicht die lexikalischen Regeln von C. Apostrophe werden beispielsweise interpretiert als
Zeichenkonstanten beginnen und Fehler verursachen. Darauf kann man sich auch nicht verlassen
Bewahren von Merkmalen der Eingabe, die für Sprachen der C-Familie nicht von Bedeutung sind.
Wenn ein Makefile vorverarbeitet wird, werden alle Hardtabs entfernt und das Makefile wird
nicht arbeiten.

Trotzdem kommt man oft damit durch, cpp für Dinge zu verwenden, die nicht C sind. Andere
Algol-artige Programmiersprachen sind oft sicher (Pascal, Ada, etc.)
Vorsicht. -traditionell-cpp Modus behält mehr Leerraum und ist ansonsten mehr
freizügig. Viele der Probleme können durch das Schreiben von Kommentaren im C- oder C++-Stil vermieden werden
anstelle von muttersprachlichen Kommentaren und einfache Makros.

Wenn möglich, sollten Sie einen Präprozessor verwenden, der auf die Sprache, die Sie schreiben, abgestimmt ist
in. Moderne Versionen des GNU-Assemblers verfügen über Makrofunktionen. Höchstes Niveau
Programmiersprachen haben ihren eigenen bedingten Kompilierungs- und Einschlussmechanismus. Wenn
alles andere schlägt fehl, versuchen Sie es mit einem echten allgemeinen Textprozessor wie GNU M4.

C-Präprozessoren unterscheiden sich in einigen Details. Dieses Handbuch behandelt den GNU C-Präprozessor, der
bietet eine kleine Obermenge der Funktionen des ISO-Standards C. Im Standardmodus ist die GNU
Der C-Präprozessor macht einige vom Standard geforderte Dinge nicht. Das sind Funktionen
die selten, wenn überhaupt, verwendet werden und zu überraschenden Veränderungen in der Bedeutung von a . führen können
Programm, das sie nicht erwartet. Um den strengen ISO-Standard C zu erhalten, sollten Sie die
-std=c90, -std=c99 or -std=c11 Optionen, je nachdem, welche Version des Standards Sie
wollen. Um alle obligatorischen Diagnosen zu erhalten, müssen Sie auch verwenden -pedantisch.

Dieses Handbuch beschreibt das Verhalten des ISO-Präprozessors. Um unentgeltliche zu minimieren
Unterschiede, bei denen das Verhalten des ISO-Präprozessors nicht im Widerspruch zu traditionellen
Semantik sollte sich der traditionelle Präprozessor genauso verhalten. Die verschiedenen
Vorhandene Unterschiede werden im Abschnitt beschrieben Traditionelle Model.

Aus Gründen der Übersichtlichkeit, sofern nicht anders angegeben, Verweise auf CPP in diesem Handbuch beziehen Sie sich auf GNU CPP.

OPTIONAL


Der C-Präprozessor erwartet als Argumente zwei Dateinamen, im Ordner und Outfiledem „Vermischten Geschmack“. Seine
Präprozessor liest im Ordner zusammen mit allen anderen Dateien, die es mit angibt #einschließen. Alle
die von den kombinierten Eingabedateien erzeugte Ausgabe wird in geschrieben Outfile.

Entweder im Ordner or Outfile könnte sein -, welche als im Ordner bedeutet, von der Standardeingabe zu lesen und
as Outfile bedeutet, auf die Standardausgabe zu schreiben. Wenn eine der Dateien ausgelassen wird, bedeutet dies, dass
das gleiche wie wenn - für diese Datei angegeben wurde.

Sofern nicht anders angegeben, oder die Option endet in =, alle Optionen, die ein Argument annehmen, können
Lassen Sie dieses Argument entweder direkt nach der Option oder mit einem Leerzeichen dazwischen erscheinen
Option und Argument: -Ifoo und -I foo haben den gleichen Effekt.

Viele Optionen haben Namen aus mehreren Buchstaben; daher können mehrere Ein-Buchstaben-Optionen nicht be
gruppiert: -dm ist sehr verschieden von -d -M.

-D Name
Vordefiniert Name als Makro, mit Definition 1.

-D Name=Definition
Die Inhalte von Definition werden tokenisiert und verarbeitet, als ob sie währenddessen erschienen wären
Übersetzungsphase drei in a #define Richtlinie. Insbesondere lautet die Definition
durch eingebettete Newline-Zeichen abgeschnitten.

Wenn Sie den Präprozessor aus einer Shell oder einem Shell-ähnlichen Programm aufrufen, benötigen Sie möglicherweise
um die Anführungszeichensyntax der Shell zu verwenden, um Zeichen wie Leerzeichen zu schützen, die ein haben
Bedeutung in der Shell-Syntax.

Wenn Sie ein funktionsähnliches Makro in der Befehlszeile definieren möchten, schreiben Sie dessen Argument
Liste mit umschließenden Klammern vor dem Gleichheitszeichen (falls vorhanden). Klammern sind
für die meisten Shells sinnvoll, daher müssen Sie die Option zitieren. Mit sh und csh,
-D'Name(Argumente...)=Definition' Werke.

-D und -U Optionen werden in der Reihenfolge verarbeitet, in der sie in der Befehlszeile angegeben sind. Alle
-Makros Datei und -einschließen Datei Optionen werden doch verarbeitet -D und -U Optionen.

-U Name
Brechen Sie jede vorherige Definition von . ab Name, entweder eingebaut oder mit a -D .

-undef
Definieren Sie keine systemspezifischen oder GCC-spezifischen Makros vor. Der Standard vordefiniert
Makros bleiben definiert.

-I dir
Verzeichnis hinzufügen dir in die Liste der Verzeichnisse, die nach Header-Dateien durchsucht werden sollen.

Verzeichnisse mit dem Namen -I werden vor den Standard-Include-Verzeichnissen durchsucht.
Wenn das Verzeichnis dir ist ein standardmäßiges System-Include-Verzeichnis, die Option wird ignoriert, um
Stellen Sie sicher, dass die Standardsuchreihenfolge für Systemverzeichnisse und die Sonderbehandlung
der Systemheader werden nicht besiegt. Wenn dir beginnt mit "=", dann ist das "="
durch das sysroot-Präfix ersetzt; sehen -Sysroot und -isysroot.

-o Datei
Ausgabe schreiben nach Datei. Dies ist das gleiche wie die Angabe Datei als zweite Nicht-Option
Argument zwei cpp. gcc hat eine andere Interpretation eines zweiten Arguments, das keine Option ist,
also musst du verwenden -o um die Ausgabedatei anzugeben.

-Wand
Schaltet alle optionalen Warnungen ein, die für normalen Code wünschenswert sind. Zur Zeit das
is -WKommentar, -Wtrigraphen, -Wmultichar und eine Warnung vor Integer-Promotion, die a . verursacht
Vorzeichenwechsel in "#if"-Ausdrücken. Beachten Sie, dass viele der Warnungen des Präprozessors
sind standardmäßig aktiviert und haben keine Optionen, um sie zu steuern.

-WKommentar
-WKommentare
Warnen, wenn eine Kommentar-Start-Sequenz /* erscheint in a /* kommentieren, oder wann immer a
Backslash-Newline erscheint in a // Kommentar. (Beide Formen haben die gleiche Wirkung.)

-Wtrigraphen
Die meisten Trigraphen in Kommentaren können die Bedeutung des Programms nicht beeinflussen. Jedoch a
Trigraph, der eine Escape-Zeile bilden würde (??/ am Ende einer Zeile) kann, durch
Ändern, wo der Kommentar beginnt oder endet. Daher nur Trigraphen, die sich bilden würden
Escape-Zeilen erzeugen Warnungen innerhalb eines Kommentars.

Diese Option wird impliziert durch -Wand. Wenn -Wand nicht angegeben ist, ist diese Option noch aktiviert
es sei denn, Trigraphen sind aktiviert. Um die Trigraph-Konvertierung ohne Warnungen zu erhalten, aber erhalten Sie
die andere -Wand Warnungen, verwenden -Trigraphen -Wand -Wno-Trigraphen.

-Wtraditionell
Warnen Sie vor bestimmten Konstrukten, die sich in traditionellem und ISO C unterschiedlich verhalten
warnen vor ISO-C-Konstrukten, die kein traditionelles C-Äquivalent haben, und problematisch
Konstrukte, die vermieden werden sollten.

-Wundef
Warnen, wenn ein Bezeichner, der kein Makro ist, in einem #wenn Richtlinie,
außerhalb von definiert. Solche Bezeichner werden durch Null ersetzt.

-Wunused-Makros
Warnen Sie vor Makros, die in der Hauptdatei definiert sind und nicht verwendet werden. Ein Makro ist benutzt wenn es so ist
mindestens einmal erweitert oder auf Existenz geprüft. Der Präprozessor warnt auch, wenn
das Makro wurde zum Zeitpunkt der Neudefinition oder Undefinition nicht verwendet.

Integrierte Makros, in der Befehlszeile definierte Makros und in include definierte Makros
Dateien werden nicht gewarnt.

Hinweis: Wenn ein Makro tatsächlich verwendet wird, aber nur in übersprungenen Bedingungsblöcken verwendet wird, dann
CPP wird es als ungenutzt melden. Um die Warnung in einem solchen Fall zu vermeiden, können Sie sich verbessern
den Umfang der Makrodefinition, indem Sie es beispielsweise in das erste übersprungene verschieben
Block. Alternativ können Sie eine Dummy-Verwendung mit etwas wie Folgendem bereitstellen:

#wenn definiert die_macro_causing_the_warning
#endif

-Wendif-Etiketten
Warnen, wann immer ein #else oder #endif gefolgt von Text. Dies geschieht normalerweise in
Code des Formulars

#wenn FOO
...
#sonst FOO
...
#endif FOO

Das zweite und dritte "FOO" sollten in Kommentaren stehen, sind aber in älteren Programmen oft nicht vorhanden.
Diese Warnung ist standardmäßig aktiviert.

-Fehler
Machen Sie alle Warnungen zu harten Fehlern. Quellcode, der Warnungen auslöst, ist
abgelehnt.

-Wsystem-Header
Geben Sie Warnungen für Code in Systemheadern aus. Diese sind normalerweise nicht hilfreich bei der Suche
Fehler im eigenen Code, daher unterdrückt. Wenn Sie für das System verantwortlich sind
Bibliothek, möchten Sie sie vielleicht sehen.

-w Unterdrücken Sie alle Warnungen, einschließlich derer, die GNU CPP standardmäßig ausgibt.

-pedantisch
Geben Sie alle obligatorischen Diagnosen aus, die in der C-Norm aufgeführt sind. Einige von ihnen sind übrig
standardmäßig aus, da sie häufig auf harmlosen Code auslösen.

-pedantische-Fehler
Geben Sie alle obligatorischen Diagnosen aus und machen Sie alle obligatorischen Diagnosen zu Fehlern.
Dies beinhaltet obligatorische Diagnosen, die GCC ohne ausgibt -pedantisch aber behandelt wie
Warnungen.

-M Anstatt das Ergebnis der Vorverarbeitung auszugeben, geben Sie eine geeignete Regel aus für um
Beschreibung der Abhängigkeiten der Hauptquelldatei. Der Präprozessor gibt eins aus
um Regel, die den Objektdateinamen für diese Quelldatei, einen Doppelpunkt und die Namen enthält
aller enthaltenen Dateien, einschließlich derer, die von -einschließen or -Makros Befehl-
Linienoptionen.

Sofern nicht ausdrücklich angegeben (mit -MT or -MQ), besteht der Objektdateiname aus dem
Name der Quelldatei mit beliebigem Suffix ersetzt durch Objektdatei-Suffix und mit beliebigem
führende Verzeichnisteile entfernt. Wenn viele Dateien enthalten sind, lautet die Regel
in mehrere Zeilen aufteilen mit -Neue Zeile. Die Regel hat keine Befehle.

Diese Option unterdrückt nicht die Debug-Ausgabe des Präprozessors, wie z -dm. Vermeiden
Wenn Sie eine solche Debug-Ausgabe mit den Abhängigkeitsregeln mischen, sollten Sie dies explizit angeben
Abhängigkeitsausgabedatei mit -MF, oder verwenden Sie eine Umgebungsvariable wie
ABHÄNGIGKEITEN_OUTPUT. Die Debug-Ausgabe wird weiterhin an den regulären Ausgabestream gesendet als
Normal.

Bestehen -M an den Fahrer impliziert -E, und unterdrückt Warnungen mit einem impliziten -w.

-MM Like -M aber erwähnen Sie keine Header-Dateien, die sich in System-Header-Verzeichnissen befinden,
noch Header-Dateien, die direkt oder indirekt von einem solchen Header enthalten sind.

Dies impliziert, dass die Wahl von spitzen Klammern oder doppelten Anführungszeichen in an #einschließen
Direktive bestimmt nicht, ob dieser Header in -MM
Abhängigkeit ausgegeben. Dies ist eine geringfügige Änderung der Semantik gegenüber den GCC-Versionen 3.0 und
früher.

-MF Datei
Bei Verwendung mit -M or -MM, gibt eine Datei an, in die die Abhängigkeiten geschrieben werden sollen. Wenn nein -MF
Schalter gegeben ist, sendet der Präprozessor die Regeln an die gleiche Stelle, an die er gesendet worden wäre
vorverarbeitete Ausgabe.

Bei Verwendung mit den Treiberoptionen -MD or -MMD, -MF überschreibt die Standardabhängigkeit
Ausgabedatei.

-Mg In Verbindung mit einer Option wie -M Abhängigkeitsgenerierung anfordern, -Mg übernimmt
fehlende Header-Dateien sind generierte Dateien und fügt sie der Abhängigkeitsliste hinzu, ohne
einen Fehler auslösen. Der Name der Abhängigkeitsdatei wird direkt vom "#include" übernommen
-Anweisung, ohne einen Pfad voranzustellen. -Mg unterdrückt auch vorverarbeitete Ausgaben, da a
fehlende Header-Datei macht dies nutzlos.

Diese Funktion wird bei der automatischen Aktualisierung von Makefiles verwendet.

-MP Diese Option weist CPP an, für jede andere Abhängigkeit als die ein falsches Ziel hinzuzufügen
main-Datei, wodurch jede von nichts abhängt. Diese Dummy-Regeln umgehen Fehler
um gibt, wenn Sie Header-Dateien entfernen, ohne die zu aktualisieren Make-Datei passen.

Dies ist eine typische Ausgabe:

test.o: test.c test.h

test.h:

-MT Ziel
Ändern Sie das Ziel der Regel, die von der Abhängigkeitsgenerierung ausgegeben wird. Standardmäßig dauert CPP
den Namen der Haupteingabedatei, löscht alle Verzeichniskomponenten und alle Dateisuffixe
sowie .c, und hängt das übliche Objektsuffix der Plattform an. Das Ergebnis ist das Ziel.

An -MT Option setzt das Ziel so, dass es genau die Zeichenfolge ist, die Sie angeben. Falls Sie es wollen
mehrere Ziele, Sie können sie als einzelnes Argument angeben, um -MToder verwenden Sie mehrere
-MT Optionen.

Zum Beispiel, -MT '$(objpfx)foo.o' könnte geben

$(objpfx)foo.o: foo.c

-MQ Ziel
Das gleiche wie -MT, aber alle Zeichen, die für Make speziell sind, werden in Anführungszeichen gesetzt.
-MQ '$(objpfx)foo.o' gibt

$$(objpfx)foo.o: foo.c

Das Standardziel wird automatisch zitiert, als ob es mit angegeben würde -MQ.

-MD -MD entspricht -M -MF Datei, außer das -E ist nicht impliziert. Der Fahrer
entschlossen Datei basierend darauf, ob ein -o Option gegeben ist. Wenn ja, verwendet der Treiber seine
Argument, aber mit einem Suffix von .d, andernfalls nimmt es den Namen der Eingabedatei an,
entfernt alle Verzeichniskomponenten und Suffixe und wendet a .d Suffix.

If -MD wird in Verbindung mit verwendet -E, irgendein -o Schalter wird verstanden, um die
Abhängigkeitsausgabedatei, aber bei Verwendung ohne -E, Die jeweils -o versteht sich als Angabe von a
Zielobjektdatei.

Da -E ist nicht impliziert, -MD kann verwendet werden, um eine Abhängigkeitsausgabedatei als
Nebeneffekt des Kompilierungsprozesses.

-MMD
Like -MD außer erwähnen Sie nur Benutzer-Header-Dateien, keine System-Header-Dateien.

-x c
-x c ++
-x Objective-C
-x Assembler-mit-cpp
Geben Sie die Quellsprache an: C, C++, Objective-C oder Assembly. Das hat nichts zu tun
mit Normenkonformität oder Erweiterungen; es wählt lediglich aus, welche Basissyntax verwendet werden soll
erwarten. Wenn Sie keine dieser Optionen angeben, leitet cpp die Sprache aus der
Erweiterung der Quelldatei: .c, . Cc, .m, oder auch .S. Einige andere gängige Erweiterungen für
C++ und Assembly werden ebenfalls erkannt. Wenn cpp die Erweiterung nicht erkennt, wird es
behandelt die Datei als C; Dies ist der allgemeinste Modus.

Hinweis: Frühere Versionen von cpp akzeptiert a -lange Option, die sowohl die
Sprache und das Konformitätsniveau der Standards. Diese Option wurde entfernt, weil
es widerspricht dem -l .

-std=Standard
-ansi
Geben Sie den Standard an, dem der Code entsprechen soll. Derzeit kennt CPP C
und C++-Standards; andere können in Zukunft hinzugefügt werden.

Standard kann einer sein von:

"c90"
"c89"
"iso9899:1990"
Die ISO-C-Norm von 1990. c90 ist die übliche Abkürzung für diese Version von
Der Standard.

Die -ansi Option ist äquivalent zu -std=c90.

"iso9899:199409"
Die C-Norm von 1990 in der Fassung von 1994.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
Die überarbeitete ISO-C-Norm, veröffentlicht im Dezember 1999. Vor der Veröffentlichung
wurde als C9X bekannt.

"iso9899:2011"
"c11"
"c1x"
Die überarbeitete ISO-C-Norm, veröffentlicht im Dezember 2011. Vor der Veröffentlichung
wurde als C1X bekannt.

"gnu90"
"gnu89"
Der C-Standard von 1990 plus GNU-Erweiterungen. Dies ist die Standardeinstellung.

"gnu99"
"gnu9x"
Der C-Standard von 1999 plus GNU-Erweiterungen.

"gnu11"
"gnu1x"
Der C-Standard von 2011 plus GNU-Erweiterungen.

"c++98"
Der ISO C++-Standard von 1998 plus Ergänzungen.

"gnu++98"
Das Gleiche wie -std=c++98 plus GNU-Erweiterungen. Dies ist die Standardeinstellung für C++-Code.

-I- Teilen Sie den Include-Pfad auf. Alle mit angegebenen Verzeichnisse -I Optionen vor -I- sind
nur nach Headern gesucht, die mit "#include" angefordert wurdenDatei""; sie werden nicht gesucht
"#enthaltenDatei>". Wenn zusätzliche Verzeichnisse mit . angegeben werden -I Optionen nach dem
-I-, diese Verzeichnisse werden nach allen durchsucht #einschließen Richtlinien.

Zudem hat auch Frau -I- verhindert die Verwendung des Verzeichnisses des aktuellen Dateiverzeichnisses als
das erste Suchverzeichnis für "#include"Datei"".

Diese Option ist veraltet.

-nostdinc
Durchsuchen Sie nicht die Standardsystemverzeichnisse nach Header-Dateien. Nur die Verzeichnisse
du hast angegeben mit -I Optionen (und das Verzeichnis der aktuellen Datei, wenn
geeignet) gesucht.

-nostdinc++
Suchen Sie nicht nach Header-Dateien in den C++-spezifischen Standardverzeichnissen, aber tun Sie es trotzdem
durchsuchen Sie die anderen Standardverzeichnisse. (Diese Option wird beim Erstellen von C++ verwendet
Bibliothek.)

-einschließen Datei
Prozess Datei als ob "#include "file"" als erste Zeile der Primärquelle erscheinen würde
Datei. Das erste Verzeichnis, nach dem gesucht wurde Datei funktioniert der Präprozessor?
Verzeichnis beantragen müssen of das Verzeichnis, das die Hauptquelldatei enthält. Wenn nicht gefunden
dort wird im Rest der Suchkette "#include "..."" gesucht als
Normal.

Wenn mehrere -einschließen Optionen angegeben sind, werden die Dateien in der Reihenfolge aufgenommen, in der sie
in der Befehlszeile erscheinen.

-Makros Datei
Genau wie -einschließen, außer dass alle durch Scannen erzeugten Ausgaben Datei ist geworfen
ein Weg. Von ihm definierte Makros bleiben definiert. Auf diese Weise können Sie alle Makros erfassen
aus einem Header, ohne auch dessen Deklarationen zu verarbeiten.

Alle Dateien angegeben von -Makros werden vor allen von . angegebenen Dateien verarbeitet -einschließen.

-idrafter dir
Suche dir für Header-Dateien, aber tun Sie es nachdem alle mit angegebenen Verzeichnisse -I und der
Standard-Systemverzeichnisse sind erschöpft. dir wird als System-Include behandelt
Verzeichnis. Wenn dir beginnt mit "=", dann wird das "=" durch das sysroot ersetzt
Präfix; sehen -Sysroot und -isysroot.

-iPräfix Präfix
Angeben Präfix als Präfix für nachfolgende -imitPräfix Optionen. Wenn das Präfix
ein Verzeichnis darstellt, sollten Sie das Finale einschließen /.

-imitPräfix dir
-iwithprefixbefore dir
Anhängen dir an das zuvor angegebene Präfix mit -iPräfix, und fügen Sie das resultierende
Verzeichnis in den Include-Suchpfad. -iwithprefixbefore bringt es an die gleiche Stelle -I
möchten; -imitPräfix legt es wo -idrafter würde.

-isysroot dir
Diese Option ist wie die -Sysroot Option, gilt aber nur für Header-Dateien (außer für
Darwin-Ziele, wo es sowohl für Header-Dateien als auch für Bibliotheken gilt). Siehe die
-Sysroot Option für weitere Informationen.

-imultilib dir
Verwenden Sie die dir als Unterverzeichnis des Verzeichnisses, das zielspezifische C++-Header enthält.

-isystem dir
Suche dir für Header-Dateien, nach allen durch . angegebenen Verzeichnissen -I aber vor dem
Standard-Systemverzeichnisse. Markieren Sie es als Systemverzeichnis, damit es dasselbe erhält
Sonderbehandlung wie bei den Standard-Systemverzeichnissen.

If dir beginnt mit "=", dann wird "=" durch das Sysroot-Präfix ersetzt; sehen
-Sysroot und -isysroot.

-Ich zitiere dir
Suche dir nur für Header-Dateien, die mit "#include" angefordert wurdenDatei""; Sie sind nicht
gesucht nach "#includeDatei>", vor allen durch . angegebenen Verzeichnissen -I und vor dem
Standard-Systemverzeichnisse.

If dir beginnt mit "=", dann wird "=" durch das Sysroot-Präfix ersetzt; sehen
-Sysroot und -isysroot.

-fdirektiven-nur
Behandeln Sie bei der Vorverarbeitung Direktiven, aber erweitern Sie keine Makros.

Das Verhalten der Option hängt von der -E und -fvorverarbeitet Optionen.

Mit -E, beschränkt sich die Vorverarbeitung auf die Behandlung von Direktiven wie "#define",
"#ifdef" und "#fehler". Andere Präprozessoroperationen, wie Makroexpansion und
Trigraph-Konvertierung wird nicht durchgeführt. zusätzlich -dd Option ist implizit
aktiviert.

Mit -fvorverarbeitet, Vordefinition der Befehlszeile und der meisten eingebauten Makros ist
Behinderte. Makros wie "__LINE__", die kontextabhängig sind, werden behandelt
normalerweise. Dies ermöglicht die Zusammenstellung von Dateien, die zuvor mit "-E . vorverarbeitet wurden
-fdirectives-only".

Mit beiden -E und -fvorverarbeitet, die Regeln für -fvorverarbeitet Vorrang haben. Dies
ermöglicht die vollständige Vorverarbeitung von Dateien, die zuvor mit "-E . vorverarbeitet wurden
-fdirectives-only".

-fdollars-in-Identifikatoren
Akzeptieren $ bei Identifikatoren.

-fextended-Identifikatoren
Akzeptieren Sie universelle Zeichennamen in Bezeichnern. Diese Option ist standardmäßig aktiviert
für C99 (und spätere C-Standardversionen) und C++.

-fno-canonical-system-header
Verkürzen Sie bei der Vorverarbeitung keine Systemheaderpfade durch Kanonisierung.

-fvorverarbeitet
Zeigen Sie dem Präprozessor an, dass die Eingabedatei bereits vorverarbeitet wurde. Dies
unterdrückt Dinge wie Makroexpansion, Trigraph-Konvertierung, Escape-Newline-Spleißen,
und Verarbeitung der meisten Richtlinien. Der Präprozessor erkennt und entfernt weiterhin
Kommentare, damit Sie eine Datei mit vorverarbeitet übergeben können -C zum Compiler ohne
Probleme. In diesem Modus ist der integrierte Präprozessor kaum mehr als ein Tokenizer
für die vorderen Enden.

-fvorverarbeitet ist implizit, wenn die Eingabedatei eine der Erweiterungen hat .i, .ii or .mi.
Dies sind die Erweiterungen, die GCC für vorverarbeitete Dateien verwendet, die von . erstellt wurden -Save-Temps.

-ftabstop=Breite
Legen Sie den Abstand zwischen den Tabstopps fest. Dies hilft dem Präprozessor, die richtige Spalte zu melden
Nummern in Warnungen oder Fehlern, auch wenn in der Zeile Tabulatoren erscheinen. Wenn der Wert kleiner ist
als 1 oder größer als 100, wird die Option ignoriert. Der Standardwert ist 8.

-fdebug-cpp
Diese Option ist nur zum Debuggen von GCC nützlich. Bei Verwendung mit -E, Dumps debuggen
Informationen zu Standortkarten. Jedem Token in der Ausgabe geht der Dump von . voran
die Karte, zu der sein Standort gehört. Der Dump der Karte, die den Standort eines Tokens enthält
wäre:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"loc": }

Bei Verwendung ohne -E, diese Option hat keine Auswirkung.

-ftrack-Makro-Erweiterung[=Grad des ]
Verfolgen Sie die Standorte von Token über Makroerweiterungen hinweg. Dadurch kann der Compiler
Diagnose über den aktuellen Makro-Erweiterungsstapel, wenn ein Kompilierungsfehler auftritt in
eine Makroerweiterung. Die Verwendung dieser Option führt dazu, dass der Präprozessor und der Compiler verbrauchen
Mehr Speicherplatz. Die Grad des Parameter kann verwendet werden, um die Genauigkeit des Tokens zu wählen
Standortverfolgung, wodurch der Speicherverbrauch bei Bedarf verringert wird. Wert 0 of
Grad des deaktiviert diese Option, als ob nein -ftrack-Makro-Erweiterung war anwesend am
die Befehlszeile. Wert 1 verfolgt Token-Standorte in einem degradierten Modus aus Gründen der
minimaler Speicher-Overhead. In diesem Modus sind alle Spielsteine, die aus der Erweiterung eines
-Argument eines funktionsähnlichen Makros dieselbe Position haben. Wert 2 verfolgt Token
Standorte vollständig. Dieser Wert ist der speicherhungrigste. Wenn diese Option gegeben ist
kein Argument, der Standardparameterwert ist 2.

Beachten Sie, dass "-ftrack-macro-expansion=2" standardmäßig aktiviert ist.

-fexec-charset=charset
Legen Sie den Ausführungszeichensatz fest, der für Zeichenfolgen- und Zeichenkonstanten verwendet wird. Der Standard
ist UTF-8. charset kann jede Codierung sein, die von der "iconv"-Bibliothek des Systems unterstützt wird
Routine.

-fwide-exec-charset=charset
Legen Sie den breiten Ausführungszeichensatz fest, der für breite Zeichenfolgen- und Zeichenkonstanten verwendet wird.
Der Standardwert ist UTF-32 oder UTF-16, je nachdem, was der Breite von "wchar_t" entspricht. Wie
mit -fexec-Zeichensatz, charset kann jede Codierung sein, die von "iconv" des Systems unterstützt wird
Bibliotheksroutine; Sie werden jedoch Probleme mit Kodierungen haben, die nicht passen
genau in "wchar_t".

-Finput-charset =charset
Legen Sie den Eingabezeichensatz fest, der für die Übersetzung aus dem Zeichensatz der Eingabe verwendet wird
Datei in den von GCC verwendeten Quellzeichensatz. Wenn das Gebietsschema nicht angibt, oder GCC
kann diese Informationen nicht aus dem Gebietsschema abrufen, der Standardwert ist UTF-8. Das kann sein
entweder durch das Gebietsschema oder diese Befehlszeilenoption überschrieben. Derzeit ist der Befehls-
line-Option hat Vorrang, wenn ein Konflikt auftritt. charset kann jede Codierung sein
unterstützt durch die Bibliotheksroutine "iconv" des Systems.

-fworking-Verzeichnis
Aktivieren Sie die Generierung von Linienmarkierungen in der Präprozessorausgabe, die den Compiler
kennen das aktuelle Arbeitsverzeichnis zum Zeitpunkt der Vorverarbeitung. Wenn diese Option ist
aktiviert ist, gibt der Präprozessor nach dem ersten Linienmarker einen zweiten Linienmarker aus
mit dem aktuellen Arbeitsverzeichnis gefolgt von zwei Schrägstrichen. GCC wird dies verwenden
Verzeichnis, wenn es in der vorverarbeiteten Eingabe vorhanden ist, als das Verzeichnis, das ausgegeben wird als
das aktuelle Arbeitsverzeichnis in einigen Debugging-Informationsformaten. Diese Option ist
implizit aktiviert, wenn Debugging-Informationen aktiviert sind, dies kann jedoch mit verhindert werden
die negierte Form -fno-Arbeitsverzeichnis. Wenn der -P Flag ist im Befehl vorhanden
line hat diese Option keine Auswirkung, da keinerlei "#line"-Anweisungen ausgegeben werden.

-fno-show-Spalte
Drucken Sie keine Spaltennummern in der Diagnose. Dies kann erforderlich sein, wenn die Diagnose
von einem Programm gescannt wird, das die Spaltennummern nicht versteht, wie z
dejagnu.

-A Prädikat=beantworten
Machen Sie eine Aussage mit dem Prädikat Prädikat und antworte beantworten. Dieses Formular ist
der älteren Form vorgezogen -A Prädikat(beantworten), die immer noch unterstützt wird, weil es
verwendet keine Shell-Sonderzeichen.

-A -Prädikat=beantworten
Stornieren Sie eine Behauptung mit dem Prädikat Prädikat und antworte beantworten.

-dCHARS
Schreiben ist eine Folge von einem oder mehreren der folgenden Zeichen und darf nicht sein
ein Leerzeichen vorangestellt. Andere Zeichen werden vom eigentlichen Compiler interpretiert, oder
für zukünftige Versionen von GCC reserviert und werden daher stillschweigend ignoriert. Wenn Sie angeben
Charaktere, deren Verhalten widersprüchlich ist, ist das Ergebnis undefiniert.

M Generieren Sie anstelle der normalen Ausgabe eine Liste von #define Richtlinien für alle
Makros, die während der Ausführung des Präprozessors definiert wurden, einschließlich vordefinierter
Makros. Auf diese Weise können Sie herausfinden, was in Ihrer Version von . vordefiniert ist
der Präprozessor. Angenommen, Sie haben keine Datei foo.h, der Befehl

berühren Sie foo.h; cpp -dM foo.h

zeigt alle vordefinierten Makros an.

Wenn Du -dm ohne das -E Option, -dm wird als Synonym für interpretiert
-fdump-rtl-mach.

D Like M außer in zweierlei Hinsicht: das tut es nicht enthalten die vordefinierten Makros, und es
Ausgänge beide #define Anweisungen und das Ergebnis der Vorverarbeitung. Beide Arten
der Ausgabe gehen Sie in die Standardausgabedatei.

N Like D, sondern geben nur die Makronamen aus, nicht ihre Erweiterungen.

I Ausgang #einschließen Direktiven zusätzlich zum Ergebnis der Vorverarbeitung.

U Like D außer dass nur Makros, die erweitert sind oder deren Definiertheit getestet wird
in Präprozessordirektiven werden ausgegeben; die Ausgabe wird bis zur Verwendung verzögert oder
Test des Makros; und #undef Direktiven werden auch für getestete Makros ausgegeben, aber
damals undefiniert.

-P Verhindern Sie die Erzeugung von Linienmarkierungen in der Ausgabe des Präprozessors. Das könnte sein
nützlich, wenn der Präprozessor auf etwas ausgeführt wird, das kein C-Code ist und gesendet wird
zu einem Programm, das durch die Linienmarkierungen verwechselt werden könnte.

-C Kommentare nicht verwerfen. Alle Kommentare werden an die Ausgabedatei weitergegeben, außer
für Kommentare in verarbeiteten Weisungen, die mit der Weisung gelöscht werden.

Sie sollten auf Nebenwirkungen bei der Anwendung vorbereitet sein -C; es bewirkt, dass der Präprozessor
Kommentare als eigenständige Token behandeln. Zum Beispiel Kommentare, die beim
Beginn einer Direktive-Linie hat den Effekt, dass diese Linie in eine
normale Quellzeile, da das erste Token in der Zeile nicht mehr a . ist #.

-CC Verwerfen Sie keine Kommentare, auch nicht während der Makroerweiterung. Das ist wie -C, außer
dass Kommentare, die in Makros enthalten sind, auch an die Ausgabedatei weitergegeben werden, wo
das Makro wird erweitert.

Neben den Nebenwirkungen der -C Option, die -CC Option verursacht alle C++-Stile
Kommentare in einem Makro, die in Kommentare im C-Stil umgewandelt werden sollen. Dies soll später verhindert werden
Verwendung dieses Makros, um den Rest der Quellzeile versehentlich auskommentieren zu können.

Die -CC Option wird im Allgemeinen verwendet, um Lint-Kommentare zu unterstützen.

-traditionell-cpp
Versuchen Sie, das Verhalten altmodischer C-Präprozessoren im Gegensatz zu ISO C . zu imitieren
Präprozessoren.

-Trigraphen
Trigraph-Sequenzen verarbeiten.

-neu zuordnen
Aktivieren Sie speziellen Code, um Dateisysteme zu umgehen, die nur sehr kurze Dateien zulassen
Namen wie MS-DOS.

--help
--target-help
Geben Sie Text aus, der alle Befehlszeilenoptionen beschreibt, anstatt alles vorzuverarbeiten.

-v Ausführlicher Modus. Drucken Sie die Versionsnummer von GNU CPP zu Beginn der Ausführung aus und
meldet die endgültige Form des Include-Pfads.

-H Drucken Sie den Namen jeder verwendeten Header-Datei zusätzlich zu anderen normalen Aktivitäten. Jeder
Name ist eingerückt, um zu zeigen, wie tief im #einschließen Stapel ist es. Vorkompilierter Header
Dateien werden auch gedruckt, selbst wenn sie sich als ungültig herausstellen; eine ungültige vorkompilierte
Header-Datei wird gedruckt mit ... x und ein gültiges mit ...! .

-Ausführung
--Version
Drucken Sie die Versionsnummer von GNU CPP aus. Fahren Sie mit einem Bindestrich wie gewohnt mit der Vorverarbeitung fort.
Beenden Sie sofort mit zwei Strichen.


In diesem Abschnitt werden die Umgebungsvariablen beschrieben, die sich auf die Funktionsweise von CPP auswirken. Du kannst
verwenden Sie sie, um Verzeichnisse oder Präfixe anzugeben, die bei der Suche nach Include-Dateien verwendet werden sollen, oder um
Steuerabhängigkeitsausgabe.

Beachten Sie, dass Sie auch Orte für die Suche mit Optionen wie -I, und Kontrolle
Abhängigkeitsausgabe mit Optionen wie -M. Diese haben Vorrang vor Umgebungsvariablen,
die wiederum Vorrang vor der Konfiguration von GCC haben.

CPATH
C_include_path
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Der Wert jeder Variablen ist eine Liste von Verzeichnissen, die durch ein Sonderzeichen getrennt sind
Gefällt mir PATH, in dem nach Header-Dateien gesucht werden soll. Der besondere Charakter,
"PATH_SEPARATOR", ist zielabhängig und wird zur GCC-Build-Zeit bestimmt. Für Microsoft
Bei Windows-basierten Zielen ist es ein Semikolon, und bei fast allen anderen Zielen ist es ein
Doppelpunkt.

CPATH gibt eine Liste von Verzeichnissen an, die durchsucht werden sollen, als ob mit angegeben -I, Aber
nach beliebigen Pfaden mit -I Optionen auf der Kommandozeile. Diese Umgebungsvariable
wird unabhängig davon verwendet, welche Sprache vorverarbeitet wird.

Die restlichen Umgebungsvariablen gelten nur bei der Vorverarbeitung des jeweiligen
Sprache angegeben. Jeder gibt eine Liste von Verzeichnissen an, die durchsucht werden sollen, als ob
angegeben mit -isystem, aber nach allen Pfaden, die mit . angegeben sind -isystem Optionen auf der
Befehlszeile.

In all diesen Variablen weist ein leeres Element den Compiler an, seine aktuellen
Arbeitsverzeichnis. Leere Elemente können am Anfang oder Ende eines Pfads erscheinen. Zum
Beispiel, wenn der Wert von CPATH ist ":/special/include", das hat den gleichen Effekt wie
-I. -ich/besonders/einschließen.

ABHÄNGIGKEITEN_OUTPUT
Wenn diese Variable gesetzt ist, gibt ihr Wert an, wie Abhängigkeiten für Make based . ausgegeben werden
auf den vom Compiler verarbeiteten Nicht-System-Header-Dateien. System-Header-Dateien sind
in der Abhängigkeitsausgabe ignoriert.

Der Wert der ABHÄNGIGKEITEN_OUTPUT kann nur ein Dateiname sein, in diesem Fall gelten die Make-Regeln
werden in diese Datei geschrieben, wobei der Zielname anhand des Quelldateinamens erraten wird. Oder der
Wert kann die Form haben Datei Ziel, in diesem Fall werden die Regeln in eine Datei geschrieben Datei
Verwendung von Ziel als Zielname.

Mit anderen Worten, diese Umgebungsvariable entspricht der Kombination der Optionen -MM
und -MF, mit optionalem -MT auch wechseln.

SUNPRO_ABHÄNGIGKEITEN
Diese Variable ist die gleiche wie ABHÄNGIGKEITEN_OUTPUT (siehe oben), außer dass System
Header-Dateien werden nicht ignoriert, also impliziert es -M statt -MM. Jedoch die
die Abhängigkeit von der Haupteingabedatei entfällt.

Verwenden Sie CPP online über die Dienste von onworks.net



Neueste Linux- und Windows-Online-Programme