C++ Compiler Kompatibilität
Nach oben zu C++-Compiler - Index
Projekt > Optionen > C++-Compiler > Kompatibilität
Verwenden Sie dieses Dialogfeld zum Setzen von speziellen Kompatibilitätsoptionen für den C++-Compiler.
Die Optionen in diesem Dialogfeld ermöglichen die Rückwärtskompatibilität mit früheren Versionen des Compilers. Im Allgemeinen sollten Sie diese Optionen nur auf True setzen, wenn Sie diese Kompatibilität auch wirklich benötigen. Die Vorgabewerte sind False.
Hinweis: Einige Kompatibilitätsoptionen haben Schalter, die mit -Vb beginnen. Diese Optionen sind in der folgenden Tabelle zusammengefasst:
| Befehlszeilenoptionen | Bedeutung |
|---|---|
|
-Vb |
Alle -Vb-Optionen aktivieren. Aktiviert Rückwärtskompatibilität mit den Bcc-Versionen 5.8.2 und früher. |
|
-Vb+ |
Alle -Vb-Optionen aktivieren. |
|
-Vb- |
Alle -Vb-Optionen deaktivieren. |
|
-Vb. |
Setzt alle -Vb-Optionen auf ihre Vorgabewerte zurück. Steht nur in der Befehlszeile, nicht in der IDE, zur Verfügung. |
|
-Vbc |
Blendet Referenz zu Referenz nicht aus. |
|
-Vbe |
Lässt die explizite template-Spezialisierung im alten Stil zu. |
|
-Vbn |
Lässt den Aufruf einer nicht konstanten Member-Funktion für ein konstantes Objekt zu. |
|
-Vbo |
Verwendet die alten Auflösungsregeln für das Überladen. |
|
-Vbr |
Lässt nicht konstante Referenzbindung zu. |
|
-Vbs |
Behandelt String-Literale nicht als 'const'. |
|
-Vbt |
Verwendet alte Borland-Typregeln für dreiteilige Operatoren. |
|
-Vbx |
Lässt explizite template-Spezialisierungen als Member-Funktionen zu. |
| Optionen | Beschreibung |
|---|---|
|
Build-Konfigurationsoptionen |
Werden im Thema Build-Konfigurationsoptionen beschrieben. |
|
Gemeinsame Optionen |
Werden im Thema Gemeinsame Elemente auf den Projektoptionsseiten beschrieben. |
| C++-Kompatibilitätsoptionen | Beschreibung |
|---|---|
|
Langsame virtuelle Basiszeiger ('slow') |
Verwendet langsame virtuelle Basiszeiger ('slow'). Vorgabe = False |
|
Konstruktor-Verschiebungen |
Unterstützt Konstruktor-Verschiebungen. Vorgabe = False |
|
Explizite Vorlagenspezialisierung als Member-Funktion |
Lässt explizite template-Spezialisierungen als Member-Funktionen zu. Vorgabe = False |
|
Altes Borland-Klassen-Layout |
Dies ist eine Option für die Rückwärtskompatibilität. Sie veranlasst den C++-Compiler, abgeleitete Klassen auf dieselbe Weise zu generieren, wie das in früheren Versionen von C++Builder der Fall war. Aktivieren Sie diese Option, wenn Sie Quelldateien compilieren möchten, die zusammen mit älteren Versionen von C++Builder verwendet werden sollen (z.B. wenn Sie mit einer .DLL arbeiten möchten, die sich nicht neu compilieren lässt, oder wenn Sie ältere Datendateien verwenden, die hartcodierte Klassen-Layouts enthalten). Vorgabe = False |
|
Klassenargumente im alten Stil |
Unterstützt Klassenargumente im alten Stil. Vorgabe = False |
|
Explizite Vorlagenspezialisierung im alten Stil |
Lässt die explizite template-Spezialisierung im alten Stil zu. Vorgabe = False |
|
virdef-Generierung im alten Stil |
Verwendet die virdef-Erzeugung im alten Stil. Vorgabe = False |
|
'this' zuerst |
Forciert, wie bei Pascal, zuerst 'this'. Der Compiler legt Parameter normalerweise von rechts nach links auf den Stack. Vorgabe = False |
|
VC++-Kompatibilität |
Dient dem Herstellen von Kompatibilität mit Microsoft Visual C++; ersetzt die Aufrufkonvention |
|
VTable nach vorne |
Setzt den virtuellen Tabellenzeiger an den Anfang des Objekt-Layouts. Vorgabe = False |
|
Leere Basisklasse mit Länge null |
Normalerweise ist die Größe einer Klasse mindestens ein Byte, auch wenn die Klasse keine Daten-Member definiert. Wenn Sie diese Option setzen, ignoriert der Compiler dieses nicht verwendete Byte beim Aufbau des Speichers und der Gesamtgröße einer abgeleiteten Klasse; leere Basisklassen verbrauchen keinen Platz in abgeleiteten Klassen. Vorgabe = False |
|
Leere Klassen-Member-Funktion mit Länge null |
Meist ist die Größe eines Daten-Member in einer Klassendefinition mindestens ein Byte. Wenn diese Option aktiviert ist, ermöglicht der Compiler eine leere Struktur mit Nulllänge. Vorgabe = False |
| Allgemeine Optionen | Beschreibung |
|---|---|
|
Abwärtskompatibilität |
Aktiviert alle -Vxxx-Optionen für die Abwärtskompatibilität. Vorgabe = False |
|
Lexikalischen Digraph-Scanner deaktivieren |
Deaktiviert den lexikalischen Digraph-Scanner. Digraphen sind Sequenzen aus zwei Zeichen, die für ein einzelnes Zeichen stehen, das auf bestimmten Tastaturen nur schwer erzeugt werden kann. Wenn diese Option True ist, werden solche Diagraphen nicht erkannt. Vorgabe = False |
|
Ref-zu-Ref nicht ausblenden und qualifizierte Referenzen zulassen |
Früher war eine Referenz zu einer Referenz nicht zulässig. Das neue Standardverhalten folgt den C++0x-Regeln. Der Compiler blendet die beiden Referenzen jetzt aus. Zum Beispiel: typedef int & intr; typedef intrr &; Der Typ Eine qualifizierte Referenz war früher auch ungültig. Die neuen Regeln verlangen für Qualifizierer, dass sie ausgeblendet werden, wenn sie das Ergebnis einer Typdefinition sind. Zum Beispiel: typedef int & intr; typedef intcr const; Nach den neuen C++-Regeln ist |
|
Aufrufkonvention nicht verkürzen |
Ist diese Option gesetzt, deaktiviert der Compiler die Unterscheidung von Funktionsnamen, wenn der einzig mögliche Unterschied in inkompatiblen Codeerzeugungsoptionen besteht. Wenn Sie diese Option aktivieren, kann der Linker z.B. nicht feststellen, ob ein Aufruf einer __fastcall-Member-Funktion mit der Aufrufkonvention cdecl erfolgt. Diese Einstellung ermöglicht das Compilieren von alten Bibliotheksdateien, die auf andere Weise nicht neu compiliert werden können. Vorgabe = False |
|
Alle Kompatibilitätsoptionen aktivieren |
Setzt fast alle Kompatibilitäts-Flags, die in altem Code verwendet wurden und aktiviert -Vv , -Va, -Vp, -Vt, -Vc, -Vd und -Vx. |
|
Neue Operatorennamen aktivieren |
Ermöglicht neue Operatorennamen wie 'and', 'or', 'and_eq', 'bitand', etc. Vorgabe = False |
|
Gültigkeitsbereich für for-Anweisung |
Gibt den Gültigkeitsbereich der Variablen für Schleifen-Ausdrücke an. Die Ausgabe der folgenden Codesegemente ändert sich je nach Einstellung dieser Option: int main(void)
{
for(int i=0; i<10; i++)
{
cout << "Inside for loop, i = " << i << endl;
} //Ende des for-Schleifenblocks
cout << "Outside for loop, i = " << i << endl; //error without -Vd
} //Ende des Blocks, der die for-Schleife enthält
Ist diese Option nicht aktiviert (Standardeinstellung), erstreckt sich die Variable i über den Gültigkeitsbereich hinaus, wenn die Verarbeitung das Ende der Schleife erreicht. Deshalb erhalten Sie den Compilierungsfehler "Undefiniertes Symbol", wenn Sie diesen Code mit dieser deaktivierten Option compilieren. Ist diese Option aktiviert (-Vd), erstreckt sich die Variable i über den Gültigkeitsbereich hinaus, wenn die Verarbeitung das Ende des Blocks mit der Schleife erreicht. In diesem Fall würde die Ausgabe so lauten: Inside for loop, i = 0 ... Outside for loop, i = 10 Vorgabe = False |
|
Globale Funktionen in Segmenten (-VA) |
Erzeugt alle globalen Funktionen in ihrem eigenen virtuellen oder schwachen Segment. |
|
Microsoft-Header-Suchalgorithmus |
Verwendet den Microsoft-Suchalgorithmus zum Suchen von Header-Dateien. |
|
Nativer Quelltext für MBCS |
Gibt nativen Code statt Unicode für Multibyte-Zeichen aus. |
|
Nicht konstante Aufrufe für konstantes Objekt |
Lässt den Aufruf einer nicht konstanten Member-Funktion für ein konstantes Objekt zu. |
|
Nicht konstante Referenzbindung |
Lässt nicht konstante Referenzbindung zu. |
|
Nicht-konstante String-Literale |
Behandelt String-Literale nicht als 'const'. |
|
Alte 8.3 Include-Suche |
Verwendet den alten 8.3-Suchalgorithmus zum Suchen von Header-Dateien. |
|
Alte Auflösung für das Überladen |
Verwendet die alten Auflösungsregeln für das Überladen. |
|
Multizeichenkonstanten umkehren |
Der Compiler dreht die Reihenfolge von Multizeichenkonstanten um. |
| Allgemeine Option | Beschreibung |
|---|---|
|
Standard für neue Projekte |
Speichert die aktuellen Einstellungen als Standardeinstellungen für neue Projekte. |