Anzeigen: Delphi C++
Anzeigeeinstellungen

C++-Compiler

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

Nach oben zu C++-Compiler-Projektoptionen

Projekt > Optionen > C++-Compiler

Verwenden Sie dieses Dialogfeld zum Setzen von Optionen für den C++-Compiler.

Inhaltsverzeichnis

Optionen Beschreibung

Ziel, Übernehmen, Speichern

Siehe Optionen für das Ziel.

Gemeinsame Elemente

Siehe Gemeinsame Elemente auf den Projektoptionsseiten.

C++-Compilierung

C++-Compilierung Beschreibung

Exceptions aktivieren
(-x)

Setzt die Exception-Behandlung in C++. Ist diese Option deaktiviert (-x-), und Sie versuchen, die Routinen zu Exception-Behandlung in Ihrem Quelltext zu verwenden, erzeugt der Compiler bei der Compilierung Fehlermeldungen.

Wenn Sie diese Option deaktivieren, lassen sich Informationen zur Exception-Behandlung leichter aus Programmen entfernen. Dies ist besonders dann hilfreich, wenn das Programm auf andere Plattformen oder Compiler portiert werden soll. Die Deaktivierung führt nur dazu, dass der Quelltext zur Exception-Behandlung von der Compilierung ausgeschlossen wird. Die Anwendung kann trotzdem Exception-Quelltext enthalten, wenn Sie .OBJ- und Bibliotheksdateien linken, die mit aktivierten Exceptions compiliert wurden (z.B. C++Builder-Laufzeit-Bibliotheken).

Vorgabe = True

Destruktor-Bereinigung
(-xd)

Wenn diese Option aktiviert ist, und eine Exception auftritt, werden für alle automatisch im Bereich der catch- und throw-Anweisungen deklarierten Objekte Destruktoren aufgerufen.

Normalerweise ist es angebracht, zusammen mit dieser Option auch die Option RTTI aktivieren zu setzen. Für dynamische Objekte, die mit new zugewiesen wurden, werden die Destruktoren nicht automatisch aufgerufen, und es erfolgt auch keine automatische Freigabe dieser Objekte.

Vorgabe = True

Schnelle Exception-Prologe
(-xf)

Erweitert den Inline-Quelltext für jede Funktion zur Exception-Behandlung. Mit dieser Option können Sie die Performance des Programms erhöhen. Die ausführbare Datei nimmt aber an Umfang zu.

Vorgabe = False

Globaler Destruktorzähler
(-xdg)

Verwendet die globale Destruktorzählung (aus Gründen der Kompatibilität mit älteren Versionen des Compilers).

Vorgabe = False

Exception-Variablen ausblenden
(-xv)

Der Compiler behandelt die folgenden Symbole bei der Exception-Behandlung als Sonderfall:

  • __exception_info
  • __exception_code
  • __abnormal_termination

Diese werden allen speziellen Compiler/RTL-Konstrukten für eine strukturierte Exception-Behandlung (SEH) zugeordnet. Wenn Sie SEH nicht nutzen und Variablen dieses Namens verwenden, bedeutet dies, dass keine Referenz auf diese Variablen möglich ist, und der Code nicht compiliert wird. Diese Option bewirkt, dass der Compiler die speziellen Symbole in diesem Ereignis verbirgt. So lassen sich auch Variablen dieses Namens verwenden.

Vorgabe = False

Positionsinformation
(-xp)

Ist diese Option aktiviert, gibt der Compiler den Dateinamen und die Nummer der Quelltextzeile an, an der eine Exception aufgetreten ist. Dies ermöglicht die Identifizierung von Exceptions zur Laufzeit. Das Programm kann aufgrund dieser Angaben mit den globalen Funktionen __ThrowFileName und __ThrowLineNumber die Datei bzw. die Zeilennummer ermitteln, in der die C++-Exception aufgetreten ist.

Vorgabe = False

Keine DLL/MT-Destruktor-Bereinigung
(-xds)

Führt keine Bereinigung von DLLs oder Multithread-Destruktoren aus.

Vorgabe = False

Langsame Exception-Epiloge
(-xs)

Wenn diese Option gesetzt ist, wird Epilogcode zur Exception-Behandlung nicht inline erweitert. Diese Option beeinträchtigt die Performance geringfügig.

Vorgabe = False

RTTI aktivieren
(-RT)

Veranlasst den Compiler, Code zu erzeugen, der eine Typidentifikation zur Laufzeit (RTTI) ermöglicht.
Allgemein gilt: Wenn die Option Destruktor-Bereinigung (-xd) aktiviert ist, muss auch diese Option gesetzt werden.

Vorgabe = True

Präzision der Elementzeiger
(-Vmp)

Der Compiler verwendet die angegebene Genauigkeit für Member-Zeigertypen. Aktivieren Sie diese Option, wenn ein Zeiger auf eine abgeleitete Klasse explizit in einen Member-Zeiger einer einfacheren Basisklasse umgewandelt wird (d.h. der Zeiger zeigt auf ein Member einer abgeleiteten Klasse).

Vorgabe = False

Elementzeiger

So klein wie möglich
(-Vmd)

Member-Zeiger müssen die kleinstmögliche Repräsentation verwenden, damit sie auf alle Member ihrer Klasse zeigen können. Wenn die Klasse an der Stelle der Member-Zeigerdeklaration nicht vollständig definiert ist, verwendet der Compiler die allgemeinste Repräsentation und gibt eine Warnung aus.

Mehrfachvererbung
(-Vmm)
Member-Zeiger können auf Member von Mehrfachvererbungsklassen zeigen. Ausgenommen hiervon sind virtuelle Basisklassen.

Einfachvererbung
(-Vms)
Member-Zeiger können nur auf Member von Basisklassen zeigen, die einfach vererben.

Vorgabe*
Für die Member-Zeiger werden keine Optionen gesetzt.
Dies ist die Vorgabe.

Vorlagenerzeugung

Vorgabe
(-Jgd)*
Der Compiler erzeugt public (globale) Definitionen für alle template-Instanzen. Wenn dieselbe template-Instanz von mehreren Modulen erzeugt wird, fügt der Linker die Einzelinstanzen automatisch zu einer einzigen Kopie dieser Instanz zusammen. Für die Erzeugung der Instanzen benötigt der Compiler den Funktionsrumpf (bei einer template-Funktion) oder die Rümpfe der Member-Funktionen und Definitionen für statische Daten-Member (bei einer template-Klasse). Diese sind in der Regel in einer Header-Datei enthalten.

Auf diese Weise lassen sich template-Instanzen einfach erstellen. Dies ist die Vorgabe.

Extern
(-Jgx)
Der Compiler erzeugt externe Referenzen zu allen template-Instanzen Für template-Instanzen, die gelinkt werden müssen, muss eine explizite Instantiierungsdirektive in mindestens einem anderen Modul enthalten sein.

Virtuelle Tabellen

Intelligent
(-V)*
Es werden gemeinsame virtuelle C++-Funktionstabellen und Inline-Funktionen für alle Module in einer Anwendung erzeugt. Das Programm enthält dann jeweils nur eine Instanz für jede virtuelle Tabelle bzw. Inline-Funktion. Mit der Option Intelligent erhalten Sie sehr kleine und effiziente ausführbare Dateien. Die erzeugten .OBJ- und .ASM-Dateien sind aber nur zu Linkern und Assemblern von C++Builder kompatibel. Dies ist die Vorgabe.

Extern
(-V0)
Es werden externe Referenzen auf virtuelle Tabellen erzeugt. Wenn Sie die Option Intelligent nicht verwenden wollen, können Sie mit Extern (oder Public) globale virtuelle Tabellen erzeugen und referenzieren. Bei Verwendung von Extern müssen ein oder mehrere Module des Programms mit der Option Public compiliert werden, um die Definitionen für die virtuellen Tabellen bereitzustellen.

Public
(-V1)
Es werden public Definitionen für virtuelle Tabellen erzeugt. Bei Verwendung der Option Extern (-V0) muss mindestens ein Modul im Programm mit der Option Public compiliert werden, um die Definitionen für die virtuellen Tabellen bereitzustellen. Alle anderen Module müssen dann mit Extern compiliert werden, damit sie auf die Public-Kopie der virtuellen Tabellen Bezug nehmen.

Vorgabe = Intelligent

Allgemeine Compilierung

Allgemeine Compilierung Beschreibung

Aufrufkonvention

Pascal
(-p)
Teilt dem Compiler mit, eine Pascal-Aufrufsequenz für Funktionsaufrufe (keine Unterstriche, nur Großbuchstaben, Aufruffunktion bereinigt den Stack, Parameter von links nach rechts verarbeiten) zu erzeugen. Diese Option hat denselben Effekt wie das Schlüsselwort __pascal. Die resultierenden Funktionsaufrufe sind normalerweise kleiner und laufen schneller als die, die mit der Aufrufkonvention C (-pc) generiert wurden. Funktionen müssen Argumente immer mit passendem Typ und passender Anzahl übergeben. Mit den Schlüsselwörtern __cdecl, __fastcall oder __stdcall kann eine Funktion oder eine Unterroutine explizit mit anderer Aufrufkonvention deklariert werden.

C
(-pc)*
Teilt dem Compiler mit, eine C-Aufrufsequenz für Funktionsaufrufe (Unterstriche generieren, Berücksichtigung von Groß- und Kleinschreibung, Parameter von rechts nach links verarbeiten) zu erzeugen. Diese Option hat denselben Effekt wie das Schlüsselwort __cdecl. Funktionen, die mit der Aufrufkonvention C deklariert sind, können eine variable Parameterliste entgegennehmen, das heißt, die Anzahl der Parameter muss nicht fest sein.
Mit den Schlüsselwörtern __pascal, __fastcall oder __stdcall kann eine Funktion oder eine Unterroutine explizit mit anderer Aufrufkonvention deklariert werden. Dies ist die Vorgabe.

_msfastcall
(-pm)
Teilt dem Compiler mit, die Aufrufkonvention __msfastcall für alle Funktionen zu verwenden, für die keine explizite Aufrufkonvention deklariert ist.

Fastcall (Register)
(-pr)
Zwingt den Compiler, alle Unterroutinen und Funktionen mit der Register-Parameterübergabekonvention zu erzeugen. Dies hat denselben Effekt wie das Deklarieren aller Unterroutinen und Funktionen mit dem Schlüsselwort __fastcall. Wenn diese Option aktiviert ist, erwarten Funktionen und Routinen die Parameterübergabe in Registern.

Mit den Schlüsselwörtern __pascal, __cdecl oder __stdcall kann eine Funktion oder eine Unterroutine explizit mit anderer Aufrufkonvention deklariert werden.

stdcall
(-ps)
Teilt dem Compiler mit, eine stdcall-Aufrufsequenz für Funktionsaufrufe (keine Unterstriche, Schreibweise beibehalten, Ablegen aufgerufener Funktionen auf dem Stack, Parameter von rechts nach links verarbeiten) zu erzeugen. Diese Option hat denselben Effekt wie das Schlüsselwort __stdcall. Funktionen müssen Argumente immer mit passendem Typ und passender Anzahl übergeben.

Mit den Schlüsselwörtern __cdecl, __pascal oder __fastcall kann eine Funktion oder eine Unterroutine explizit mit anderer Aufrufkonvention deklariert werden.

Vorgabe = C (-pc)

Datenausrichtung

Byte
(-a1)
Forciert nicht die Ausrichtung von Variablen oder Datenfeldern an bestimmten Speichergrenzen. Der Compiler richtet die Daten an geraden oder ungeraden Adressen aus, je nach der nächsten verfügbaren Adresse. Während die Byte-Ausrichtung zwar kompaktere Programme erzeugt, sind diese meist jedoch etwas langsamer. Die anderen Optionen zur Datenausrichtung erhöhen die Geschwindigkeit, mit der 80x86-Prozessoren Daten holen und speichern.

Word
(-a2)
2-Byte-Datenausrichtung. Richtet Nicht-Zeichendaten an geraden Adressen aus. Automatische und globale Variablen werden korrekt ausgerichtet. char- und unsigned char-Variablen und -Felder können an jeder Adresse platziert werden; alle anderen werden an geraden Adressen ausgerichtet.

Double Word
(-a4)
4-Byte-Datenausrichtung. Richtet Nicht-Zeichendaten an 32-Bit-Grenzen aus (4 Byte). Datentypen mit weniger als 4 Byte werden entsprechend ihrer Typgröße ausgerichtet.

Quad Word
(-a8)*
8-Byte-Datenausrichtung. Richtet Nicht-Zeichendaten an 64-Bit-Grenzen aus (8 Byte). Datentypen mit weniger als 8 Byte werden entsprechend ihrer Typgröße ausgerichtet. Dies ist die Vorgabe.

Paragraph
(-a16)
16-Byte-Datenausrichtung. Richtet Nicht-Zeichendaten an 128-Bit-Grenzen aus (16 Byte). Datentypen mit weniger als 16 Byte werden entsprechend ihrer Typgröße ausgerichtet.

Vorgabe = Quad Word [8]

Stapel-Compilierung aktivieren

Aktiviert die Stapel-Compilierung durch den C++-Compiler (bcc32). Wenn diese Option aktiviert ist, werden in der Befehlszeile alle Quellmodule (anstatt jedes Modul einzeln) an den C++-Compiler übergeben. Bei der Stapel-Compilierung werden Build-Ereignisse für die gesamte Compilierung und nicht für einzelne Dateien erzeugt. Eine Stapel-Compilierung verwendet ein Set von Projektoptionen. Das Überschreiben dieser Optionen auf Dateiebene ist nicht zulässig.

Vorgabe = Aus

Maximale Fehleranzahl
(-j)

Bricht die Compilierung ab, sobald eine bestimmte Anzahl von Fehlern erkannt wurde. Werte von 0 bis 255 sind möglich.

Vorgabe = 1

Die Eingabe von 0 bewirkt, dass die Compilierung fortgesetzt wird, bis entweder das Ende der Datei oder die maximale Warnungsanzahl erreicht ist, je nachdem, welcher Fall zuerst eintritt.

Maximale Warnungsanzahl
(-g)

Bricht die Compilierung ab, sobald eine bestimmte Anzahl von Warnungen erkannt wurde. Werte von 0 bis 255 sind möglich.

Vorgabe = 255

Die Eingabe von 0 bewirkt, dass die Compilierung fortgesetzt wird, bis entweder das Ende der Datei oder die maximale Fehleranzahl erreicht ist, je nachdem, welcher Fall zuerst eintritt.

Beim ersten Fehler anhalten
(-jb)

Bricht die Stapel-Compilierung nach der ersten Datei ab, die Fehler verursacht. Zum Beispiel:

>BCC32 -c -gb *.ccp
>BCC32 -c -gb file1.cpp file2.cpp

Ohne das Flag -jb kann die Stapel-Compilierung bis zur nächsten vorgesehenen Datei fortgeführt werden, auch wenn eine vorherige Datei einen Fehler verursacht hat.

Erweiterte Fehlerinfos
(-Q)

Der Compiler erzeugt bei Fehlern umfassendere Informationen.

Vorgabe = False

C++-Compilierung erzwingen
(-P)

Veranlasst den Compiler, alle Quelltextdateien als C++-Dateien, unabhängig von ihrer Dateinamenserweiterung, zu compilieren.

Vorgabe = False

Anweisungs-Set

80386
(-3)*
Erzeugt für den geschützten Modus eines 80386-Prozessors kompatible Anweisungen. Dies ist die Vorgabe.

80486
(-4)
Erzeugt für den geschützten Modus eines i486-Prozessors kompatible Anweisungen.

Pentium
(-5)
Erzeugt Pentium-Instruktionen. Diese Option erhöht zwar die Ausführungsgeschwindigkeit auf Pentium-Rechnern, kann das Programm allerdings etwas vergrößern, wenn dieses mit den Optionen 80386 oder i486 compiliert wurde. Ferner ist bei für Pentium compiliertem Code mit einer Performance-Einbuße auf nicht-Pentium-Systemen zu rechnen.

Pentium Pro
(-6)
Erzeugt Pentium Pro-Instruktionen.

Vorgabe = 80386

Enums mit Integergröße (-bi; früher -b)

Weist Aufzählungstypen (Variablen des Typs enum) ein ganzes Wort (ein 4-Byte-Int bei 32-Bit-Programmen) zu.

Ist die Option nicht aktiviert (-bi-), weist der Compiler den kleinsten Integer zu, der die Aufzählungswerte aufnehmen kann: Der Compiler weist den Typ unsigned oder signed char zu, wenn die Werte der Aufzählung im Bereich zwischen 0 und 255 (Minimum) oder zwischen -128 und 127 (Maximum) liegen. Er weist den Typ unsigned oder signed short zu, wenn sich die Werte der Aufzählung in einem der folgenden Bereiche befinden: 0..65535 oder -32768..32767.

Der Compiler weist den Aufzählungswerten ein 4-Byte-Int (32 Bit) zu, wenn ein Wert außerhalb dieser Bereiche liegt.

Vorgabe = True

Enums als Integer (-b, neu für 2009)

Aktiviert Enums mit Integergröße (-bi; weiter oben beschrieben) und behandelt Enums aus der Sicht der Typprüfung als Integer (schränkt die Typprüfung ein).
Wenn diese Option deaktiviert ist (-b-), erstellt der Compiler sizeof(enum x) so klein wie möglich und wendet Enum-Regeln für die Typprüfung an.

Vorgabe = False

Sprachkonvention

ANSI
(-A)

ANSI-Schlüsselwörter und -Erweiterungen verwenden. Es wird C- und C++-ANSI-kompatibler Quelltext compiliert. Dies sorgt für maximale Portabilität. Nicht-ANSI-Schlüsselwörter werden nicht als Schlüsselwörter interpretiert.

GNU (-AG)

Verwendet Schlüsselwörter und Erweiterungen von GCC (GNU Compiler Collection), die von der Free Software Foundation unter http://gcc.gnu.org/ verteilt wird. Weist den Compiler an, bestimmte GNU-Schlüsselwörter und -Erweiterungen zu verwenden, wie z.B. __attribute__, __const, __inline__, __signed__. Siehe GNU-Attribute.

K & R
(-AK)

Verwendet Schlüsselwörter und Erweiterungen von Kernighan und Ritchie (KR). Es werden nur die von Kernighan und Ritchie definierten Ergänzungen der Sprachschlüsselwörter erkannt. Alle C++-Erweiterungen von C++Builder werden als normale Bezeichner interpretiert.

Borland/CodeGear
(auch -A-) (-AT)*

Verwendet Borland/CodeGear/Embarcadero C++-Schlüsselwörter und -Erweiterungen. Weist den Compiler an, Erweiterungen für die Schlüsselwörter der Programmiersprache C zu verwenden, einschließlich near, far, huge, asm, cdecl, pascal, interrupt, _export, _ds, _cs, _ss, _es und die Register-Pseudovariablen (_AX, _BX usw.). Dies ist die Vorgabe.

Unix System V
(-AU)

Schlüsselwörter und Erweiterungen aus UNIX-System V verwenden. Es werden nur die Unix V-Schlüsselwörter erkannt. Alle C++-Erweiterungsschlüsselwörter von Borland/CodeGear/Embarcadero werden als normale Bezeichner interpretiert.

Hinweis: Wenn im Quelltext Syntaxfehler bei Deklarationen gemeldet werden, sollten Sie prüfen, ob diese Option auf Borland/CodeGear gesetzt ist.

Vorgabe = Borland/CodeGear.

Registervariablen

Ohne
(-r-)*
Deaktiviert die Verwendung von Registervariablen. Teilt dem Compiler mit, keine Registervariablen zu verwenden, selbst dann nicht, wenn das Schlüsselwort register vorhanden ist. Dies ist die Vorgabe.

Explizit
(-rd)
Verwendet Registervariablen nur, wenn Sie das Schlüsselwort register angeben, und ein Register verfügbar ist. Mit dieser Option oder der Option Immer (-r) optimieren Sie die Nutzung von Registern. Sie können -rd in #pragma-Optionen verwenden.

Immer
(-r)
Weist automatisch Registervariablen zu, wenn möglich, auch wenn Sie das Schlüsselwort register nicht verwenden. Im Allgemeinen können Sie die Einstellung für diese Option auf Immer belassen, es sei denn, Sie arbeiten mit bereits vorhandenem Assembly-Code, der keine Registervariablen unterstützt.

Vorgabe = Ohne

Standard-Stack-Frames
(-k)

Erzeugt einen Standard-Stack-Frame (Standardcode für Einritt und Austritt in/aus der Funktion). Dies ist bei der Fehlersuche hilfreich, da sich der Stack der aufgerufenen Unterroutinen einfacher durchlaufen lässt.

Wenn diese Option deaktiviert ist, werden alle Funktionen, die keine lokalen Variablen verwenden und keine Parameter besitzen, mit verkürztem Eintritts- und Rückgabecode compiliert. Damit wird der Code kleiner und schneller.

Wenn eine Quelltextdatei zu Debugging-Zwecken compiliert wird, sollte diese Option immer aktiviert sein.

Vorgabe = True

Allgemeine Option Beschreibung

Standard für neue Projekte

Speichert die aktuellen Einstellungen als Standardeinstellungen für neue Projekte.

Siehe auch

Frühere Versionen
In anderen Sprachen