C++-Compiler

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Projektoptionen (Dialogfeld)


Projekt > Optionen > C++-Compiler

Verwenden Sie dieses Dialogfeld zum Festlegen von Optionen für die C++-Compiler.

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 bcc32c bcc64 bccosx bcciosarm bcciosarm64 bccaarm

Exceptions aktivieren

Legt die Exception-Behandlung in C++ fest. Ist diese Option deaktiviert , und Sie versuchen, die Routinen zur 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 Objekt- 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 festlegen. 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 strukturierten Exception-Behandlungscode (Structured Exception Handling, SEH) zugeordnet. Wenn Sie SEH nicht verwenden und Variablen mit diesem Namen vorhanden sind, bedeutet dies, dass Sie diese Variablen nicht referenzieren können 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 festgelegt ist, wird Epilogcode zur Exception-Behandlung nicht inline erweitert. Diese Option beeinträchtigt die Leistung geringfügig.

Vorgabe = False

YesC++11Feature.png
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 aktivieren" ausgewählt ist, muss auch diese Option festgelegt 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 festgelegt.
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 auf alle 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

Klassischer Compiler

Optionen des klassischen Compilers Beschreibung Compiler-Unterstützung
bcc32 bcc32c bcc64 bccosx bcciosarm bcciosarm64 bccaarm

'Klassischen' Borland-Compiler verwenden

Aktiviert entweder den klassischen BCC32-Compiler oder den durch Clang-erweiterten BCC32C-Compiler als C++-Compiler für 32-Bit-Windows-Plattformen.

Verwenden Sie diese Option, um von BCC32 zu BCC32C und umgekehrt zu wechseln. Sie können diese Option auf die folgenden Werte setzen:

  • True: BCC32 ist als C++-Compiler für Projekte für 32-Bit-Windows-Plattformen aktiviert.
  • False: BCC32C ist als C++-Compiler für Projekte für 32-Bit-Windows-Plattformen aktiviert.

Vorgabe = True

Allgemeine Compilierung

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

Short enums

Weist den 64-Bit-Compiler an, Aufzählungen in Minimalgröße zu verwenden.

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

Vorgabe = False

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

Aufrufkonvention

Pascal
Weist den Compiler an, 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 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
Weist den Compiler an, 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
Weist den Compiler an, 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
Der Compiler generiert eine stdcall-Aufrufsequenz für Funktionsaufrufe (keine Unterstriche, Schreibweise beibehalten, Ablegen aufgerufener Funktionen auf dem Stack, Ablegen der Parameter von rechts nach links). 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++-Zugriffskontrolle deaktivieren

Weist den Compiler an, keine Zugriffskontrolle zu erzwingen. Das heißt, dass der Compiler keinen Fehler ausgibt, wenn auf ein protected oder private Member zugriffen wird, der nicht für den Zugriff vorgesehen ist. Verwenden Sie diese Option für Code, der für BCC32 zulässig ist, aber von BCC64 als Verstoß gegen die Zugriffskontrolle 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.

Wenn diese Option aktiviert ist, werden alle Quellmodule (anstatt jedes Modul einzeln) in derselben Befehlszeile 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 einen Satz von Projektoptionen. Das Überschreiben dieser Optionen auf Dateiebene ist nicht zulässig.

Wenn Sie einen durch Clang erweiterten C++-Compiler verwenden, können Sie mit "Stapel-Compilierung aktivieren" in Kombination mit "C++-Compiler in separatem Prozess ausführen" die parallele Compilierung aktivieren. Durch Clang erweiterte Compiler für 32-Bit-Plattformen halten die Stapel-Compilierung nach dem Fehlschlagen der Compilierung einer Datei an.

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
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-Computern, kann das Programm allerdings etwas vergrößern, wenn es mit der Optionen 80386 oder i486 compiliert wird. Ferner ist bei für Pentium compiliertem Code mit einer Leistungseinbuß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 Integertyp zu, der die Aufzählungswerte aufnehmen kann: Der Compiler weist 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, oder unsigned oder signed short, 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
YesC++11Feature.png
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 , legt der Compiler sizeof(enum x) so klein wie möglich an und wendet Enum-Regeln für die Typprüfung an.

Vorgabe = False

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

Sprachkonvention

ANSI

Verwendet ANSI-Schlüsselwörter und -Erweiterungen. Compiliert C- und C++-ANSI-kompatiblen Quelltext. Dies sorgt für eine verbesserte Portabilität. Nicht-ANSI-Schlüsselwörter werden als Schlüsselwörter ignoriert.

GNU

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

K & R

Verwendet 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

Verwendet 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

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

Um die Anzahl der für den 64-Bit-C++-Compiler zulässigen Fehler festzulegen, wählen Sie in diesem Feld die Zahl aus und geben die gewünschte Anzahl ein. 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

Untergeordnete Seiten

Siehe auch