C++-Compiler

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu C++-Compiler-Projektoptionen


Projekt > Optionen > C++-Compiler

In diesem Dialogfeld legen Sie Optionen für den C++-Compiler fest.

Optionen Beschreibung

Ziel, Übernehmen, Speichern

Siehe Optionen für das Ziel.

Gemeinsame Elemente

Siehe Gemeinsame Elemente auf den Projektoptionsseiten.

C++-Compilierung

Element Beschreibung Compiler-Unterstützung
bcc32 bcc64 bccosx bcciosarm bccaarm

Exceptions aktivieren

Setzt die Exception-Behandlung in C++. Ist diese Option deaktiviert , 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. Appmethod C++-Laufzeit-Bibliotheken).

Vorgabe = True

Destruktor-Bereinigung

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 sollten Sie zusammen mit dieser Option auch die Option RTTI aktivieren 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

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

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

Vorgabe = False

Exception-Variablen ausblenden

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 (Structured Exception Handling, SEH) zugeordnet. Wenn Sie SEH nicht verwenden und Variablen mit diesem Namen vorhanden sind, 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 mit diesem Namen verwenden.

Vorgabe = False

Positionsinformation

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

Vorgabe = False

Keine DLL/MT-Destruktor-Bereinigung

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

Vorgabe = False

Langsame Exception-Epiloge

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

Vorgabe = False

YesC++11Feature.png
YesC++11Feature.png

RTTI aktivieren

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

Vorgabe = True

YesC++11Feature.png
YesC++11Feature.png

Präzision der Elementzeiger

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

YesC++11Feature.png
YesC++11Feature.png

Elementzeiger

So klein wie möglich

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
Member-Zeiger können auf Member von Mehrfachvererbungsklassen zeigen. Ausgenommen hiervon sind virtuelle Basisklassen.

Einfachvererbung
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.

YesC++11Feature.png
YesC++11Feature.png

Vorlagenerzeugung

Vorgabe
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
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.

YesC++11Feature.png
YesC++11Feature.png

Virtuelle Tabellen

Intelligent
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 mit Linkern und Assemblern von Appmethod C++ kompatibel. Dies ist die Vorgabe.

Extern
Es werden externe Referenzen auf virtuelle Tabellen erzeugt. Wenn Sie die Option Intelligent nicht verwenden möchten, 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
Es werden public Definitionen für virtuelle Tabellen erzeugt. Bei Verwendung der Option Extern 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

YesC++11Feature.png
YesC++11Feature.png

Allgemeine Compilierung

Allgemeine Compilierung Beschreibung Compiler-Unterstützung
bcc32 bcc64 bccosx bcciosarm bccaarm

Short enums

Teilt dem 64-Bit-Compiler mit, Enums mit minimaler Größe zu verwenden.

Einem Enum-Typ nur so viele Bytes zuweisen, wie für den deklarierten Bereich der möglichen Werte erforderlich sind.

Vorgabe = False

YesC++11Feature.png

Aufrufkonvention

Pascal
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 die Deklaration aller Unterroutinen und Funktionen mit dem Schlüsselwort __pascal. Die resultierenden Funktionsaufrufe sind normalerweise kleiner und laufen schneller als diejenigen, die mit der Aufrufkonvention C 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 einer anderen Aufrufkonvention deklariert werden.

C
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 die Deklaration aller Unterroutinen und Funktionen mit dem 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 einer anderen Aufrufkonvention deklariert werden. Dies ist die Vorgabe.

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

Fastcall (Register)
Weist den Compiler an, alle Unterroutinen und Funktionen mit der Register-Parameterübergabekonvention zu erzeugen. Dies hat denselben Effekt wie die Deklaration 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 Unterroutine explizit mit einer anderen Aufrufkonvention deklariert werden.

stdcall
Weist den Compiler an, 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 die Deklaration aller Unterroutinen und Funktionen mit dem 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 Unterroutine explizit mit einer anderen Aufrufkonvention deklariert werden.

Vorgabe = C

YesC++11Feature.png
YesC++11Feature.png

Datenausrichtung

Byte
Erzwingt keine 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 abrufen und speichern.

Word
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
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
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
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)

YesC++11Feature.png
YesC++11Feature.png

C++-Zugriffkontrolle deaktivieren

Weist den Compiler an, keine Zugriffkontrolle zu erzwingen. Das heißt, dass der Compiler keinen Fehler ausgibt, wenn auf ein protected oder private Member zugegriffen wird, das nicht zugreifbar sein sollte. Verwenden Sie diese Option für Code, der für BCC32 zulässig ist, aber von BCC64 als Verstoß gegen die Zugriffkontrolle behandelt wird (besser wäre es allerdings, den Code zu aktualisieren, damit er mit den BCC64-Regeln übereinstimmt). Vorgabe = False






YesC++11Feature.png

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

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

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

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

YesC++11Feature.png
YesC++11Feature.png

Erweiterte Fehlerinfos

Der Compiler erzeugt bei Fehlern umfassendere Informationen.

Vorgabe = False

YesC++11Feature.png
YesC++11Feature.png

C++-Compilierung erzwingen

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

Vorgabe = False

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

Anweisungs-Set

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

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

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

Pentium Pro
Erzeugt Pentium Pro-Instruktionen.

Vorgabe = 80386

YesC++11Feature.png
YesC++11Feature.png

Enums mit Integergröße

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

Ist die Option nicht aktiviert , 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

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

Enums als Integer

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

Vorgabe = False

YesC++11Feature.png
YesC++11Feature.png

Sprachkonvention

ANSI

Verwenden Sie ANSI-Schlüsselwörter und -Erweiterungen. Compiliert C- und C++-ANSI-kompatiblen Quelltext. Dies sorgt für maximale Portabilität. Nicht-ANSI-Schlüsselwörter werden nicht als Schlüsselwörter interpretiert.

GNU

Verwenden Sie Schlüsselwörter und Erweiterungen von Gcc (GNU Compiler Collection). Gcc wird von der Free Software Foundation unter http://gcc.gnu.org/ vertrieben. Weist den Compiler an, bestimmte GNU-Schlüsselwörter und -Erweiterungen, wie __attribute__, __const, __inline__, __signed__, zu erkennen. Siehe GNU-Attribute.

K & R

Verwenden Sie Schlüsselwörter und Erweiterungen von Kernighan und Ritchie (KR). Weist den Compiler an, nur die von Kernighan und Ritchie definierten Erweiterungsschlüsselwörter zu erkennen. Alle C++-Erweiterungsschlüsselwörter werden als normale Bezeichner interpretiert.

Borland/CodeGear

Verwenden Sie C++-Schlüsselwörter und -Erweiterungen von Borland/CodeGear/Embarcadero. Weist den Compiler an, Erweiterungen für C-Schlüsselwörter zu erkennen, 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 {{f|cmd|
(-AU)}]

Verwenden Sie Schlüsselwörter und Erweiterungen von UNIX-System V. Weist den Compiler an, nur die Unix V-Schlüsselwörter zu erkennen. Alle C++-Erweiterungsschlüsselwörter von Borland/CodeGear/Embarcadero werden als normale Bezeichner interpretiert.

Hinweis: Wenn der Quelltext Syntaxfehler in Deklarationen enthält, sollten Sie prüfen, ob diese Option auf Borland/CodeGear gesetzt ist.

Vorgabe = Borland/CodeGear.

YesC++11Feature.png
YesC++11Feature.png

Registervariablen

Ohne
Deaktiviert die Verwendung von Registervariablen. Weist den Compiler an, keine Registervariablen zu verwenden, selbst dann nicht, wenn das Schlüsselwort register vorhanden ist. Dies ist die Vorgabe.

Explizit
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
Weist automatisch Registervariablen zu, wenn möglich, auch wenn Sie das Schlüsselwort register nicht verwenden. Im Allgemeinen können Sie Immer verwenden, es sei denn, Sie arbeiten mit bereits vorhandenem Assembly-Code, der keine Registervariablen unterstützt.

Vorgabe = Ohne

YesC++11Feature.png
YesC++11Feature.png

Maximale Anzahl der auszugebenden Fehler bis Abbruch festlegen (0 = keine Beschränkung)

Geben Sie in dieses Feld die gewünschte Anzahl ein, um die Anzahl der für den 64-Bit-C++-Compiler zulässigen Fehler festzulegen. Vorgabe = 1

YesC++11Feature.png

Standard-Stack-Frames

Erzeugt einen Standard-Stack-Frame (Standardcode für Einritt und Austritt in die/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

YesC++11Feature.png
YesC++11Feature.png

Siehe auch