Anzeigen: Delphi C++
Anzeigeeinstellungen

C++ Compiler Kompatibilität

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

Nach oben zu C++-Compiler-Projektoptionen

Projekt > Optionen > C++-Compiler > Kompatibilität

Mit diesem Dialogfeld setzen Sie spezielle Kompatibilitätsoptionen für den C++-Compiler.

Die Optionen in diesem Dialogfeld ermöglichen eine Abwä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.

Inhaltsverzeichnis


Optionen Beschreibung

Ziel, Übernehmen, Speichern

Siehe Optionen für das Ziel.

Gemeinsame Elemente

Siehe Gemeinsame Elemente auf den Projektoptionsseiten.

C++-Kompatibilitätsoptionen

C++-Kompatibilitätsoptionen Beschreibung

Langsame virtuelle Basiszeiger ('slow')
(-Vv)

Verwendet langsame virtuelle Basiszeiger ('slow'). Vorgabe = False

Konstruktor-Verschiebungen
(-Vc)

Unterstützt Konstruktor-Verschiebungen. Vorgabe = False

Explizite Vorlagenspezialisierung als Member-Funktion
(-Vbx)

Lässt explizite template-Spezialisierungen als Member-Funktionen zu. Vorgabe = False

Altes Borland-Klassen-Layout
(-Vl)

Dies ist eine Option für die Abwärtskompatibilität. Sie veranlasst den C++-Compiler, abgeleitete Klassen so wie in früheren Versionen von C++Builder zu generieren. 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
(-Va)

Unterstützt Klassenargumente im alten Stil. Vorgabe = False

Explizite Vorlagenspezialisierung im alten Stil
(-Vbe)

Lässt die explizite template-Spezialisierung im alten Stil zu. Vorgabe = False

virdef-Generierung im alten Stil
(-Vs)

Verwendet die virdef-Erzeugung im alten Stil. Vorgabe = False

'this' zuerst
(-Vp)

Forciert, wie bei Pascal, zuerst 'this'. Der Compiler legt Parameter normalerweise von rechts nach links auf den Stack. Vorgabe = False

VC++-Kompatibilität
(-VM)

Dient dem Herstellen der Kompatibilität mit Microsoft Visual C++; ersetzt die Aufrufkonvention __fastcall durch __msfastcall. Diese Option sollte nicht für VCL-Anwendungen verwendet werden. Sie verursacht zahlreiche Linker-Fehler. Vorgabe = False

VTable nach vorne
(-Vt)

Setzt den virtuellen Tabellenzeiger an den Anfang des Objekt-Layouts. Vorgabe = False

Leere Basisklasse mit Länge null
(-Ve)

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
(-Vx)

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

Allgemeine Optionen Beschreibung

Abwärtskompatibilität
(-Vb)

Aktiviert alle -Vxxx-Optionen für die Abwärtskompatibilität. Vorgabe = False

Lexikalischen Digraph-Scanner deaktivieren
(-Vg)

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
(-Vbc)

Früher war eine Referenz auf eine 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 intrr ist gültig. Es handelt sich nach den neuen C++-Regeln um denselben Typ wie intr. Bcc32 (Rev. 6.0 und höher) folgt standardmäßig diesen Regeln. Nach den früheren C++-Regeln wäre intrr ungültig. Wenn Sie die Option -Vbc angeben, wird intrr wie früher als Fehler gemeldet.

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 intcr gültig und derselbe Typ wie intr. Bcc32 folgt standardmäßig diesen Regeln. Nach den früheren Regeln wäre intcr ungültig, aber bcc32 Rev 5.9 (und früher) ließ dies zu und behandelte den Typ so, als ob qualifizierte Referenzen gültig wären. Wenn Sie -Vbc angeben, wird intcr als Typ int & const behandelt.

Aufrufkonvention nicht verkürzen
(-VC)

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
(-Vo)

Setzt die meisten Kompatibilitäts-Flags, die in altem Code verwendet wurden und aktiviert -Vv , -Va, -Vp, -Vt, -Vc, -Vd und -Vx.
Vorgabe = False

Neue Operatorennamen aktivieren
(-Vn)

Ermöglicht neue Operatorennamen wie 'and', 'or', 'and_eq', 'bitand' etc. Vorgabe = False

Gültigkeitsbereich für for-Anweisung
(-Vd)

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; 
  } //end of for-loop block 
  cout << "Outside for loop, i = " << i << endl; //error without -Vd
} //end of block containing for loop

Ist diese Option deaktiviert (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 der 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.
Vorgabe = True

Microsoft-Header-Suchalgorithmus
(-VI)

Verwendet den Microsoft-Algorithmus zum Suchen von Header-Dateien.
Vorgabe = True

Nativer Quelltext für MBCS
(-Vw)

Gibt nativen Code statt Unicode für Multibyte-Zeichen aus.
Vorgabe = False

Nicht konstante Aufrufe für konstantes Objekt
(-Vbn)

Lässt den Aufruf einer nicht konstanten Member-Funktion für ein konstantes Objekt zu.
Vorgabe = False

Nicht konstante Referenzbindung
(-Vbr)

Lässt nicht konstante Referenzbindung zu.
Vorgabe = False

Nicht-konstante String-Literale
(-Vbs)

Behandelt String-Literale nicht als 'const'.
Vorgabe = False

Alte 'using'-Regeln in Vorlagen
(-Vbu)

Verwendet die alten Borland-Regeln für 'using' in Vorlagen.
Vorgabe = False

Alte 8.3 Include-Suche
(-Vi)

Verwendet den alten 8.3-Algorithmus zum Suchen von Header-Dateien.
Vorgabe = False

Alte Auflösung für das Überladen
(-Vbo)

Verwendet die alten Auflösungsregeln für das Überladen.
Vorgabe = False

Alte Typregeln für dreiteilige Operatoren
(-Vbt)

Verwendet die alten Borland-Typregeln für dreiteilige Operatoren.
Vorgabe = False

Multizeichenkonstanten umkehren
(-Vr)

Der Compiler dreht die Reihenfolge von Multizeichenkonstanten um.
Vorgabe = False

-Vb-Compiler-Optionen

Hinweis: Einige Kompatibilitätsoptionen haben C++-Compiler-Optionen, die mit -Vb beginnen. Diese Optionen sind in der folgenden Tabelle zusammengefasst:
Befehlszeilenoptionen Bedeutung

-Va

Unterstützt Klassenargumente im alten Stil.

-Vb

Aktiviert alle -Vb-Optionen. Aktiviert Abwärtskompatibilität mit den Bcc-Versionen 5.8.2 und früher.

-Vb+

Aktiviert alle -Vb-Optionen.

-Vb-

Deaktiviert alle -Vb-Optionen.

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

-Vi

Verwendet den alten 8.3-Algorithmus zum Suchen von Header-Dateien.

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

-Vbu

Verwendet alte Borland-Regeln für 'using' in Vorlagen.

-Vbx

Lässt explizite template-Spezialisierungen als Member-Funktionen zu.


Siehe auch

Frühere Versionen
In anderen Sprachen