C++-Compiler Kompatibilität

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu C++-Compiler


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

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


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 Compiler-Unterstützung
  bcc32     bcc32c     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

Langsame virtuelle Basiszeiger ('slow')

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

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

Konstruktor-Verschiebungen

Unterstützt Konstruktor-Verschiebungen. Vorgabe = False

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

Explizite Vorlagenspezialisierung als Member-Funktion

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

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

Altes Borland-Klassen-Layout

Dies ist eine Option für die Abwärtskompatibilität. Sie veranlasst den C++-Compiler, abgeleitete Klassen so wie in früheren Versionen von Appmethod C++ zu generieren. Aktivieren Sie diese Option, wenn Sie Quelldateien compilieren möchten, die zusammen mit älteren Versionen von Appmethod C++ 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

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

Klassenargumente im alten Stil

Unterstützt Klassenargumente im alten Stil. Vorgabe = False

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

Explizite Vorlagenspezialisierung im alten Stil

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

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

virdef-Generierung im alten Stil

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

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

'this' zuerst

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

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

VC++-Kompatibilität

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

YesC++11Feature.png

VTable nach vorne

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

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

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 für das Speicher-Layout und die Gesamtgröße einer abgeleiteten Klasse; leere Basisklassen verbrauchen keinen Platz in abgeleiteten Klassen. Vorgabe = False

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

Leere Klassen-Member-Funktion mit Länge null

Meist ist die Größe eines Daten-Members in einer Klassendefinition mindestens ein Byte. Wenn diese Option aktiviert ist, ermöglicht der Compiler eine leere Struktur mit Nulllänge. Vorgabe = False

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

Allgemeine Optionen

Allgemeine Optionen Beschreibung Compiler-Optionen
bcc32 bcc32c bcc64 bccosx bcciosarm bcciosarm64 bccaarm

Abwärtskompatibilität

Aktiviert alle Kompatibilitätsoptionen für die Abwärtskompatibilität. Vorgabe = False

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

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

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

Ref-zu-Ref nicht ausblenden

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 Ref-zu-Ref nicht ausblenden angeben, wird intrr wie früher als Fehler gemeldet.

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

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

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

Alle Kompatibilitätsoptionen aktivieren

Aktiviert die meisten Kompatibilitätsoptionen, die in altem Code verwendet wurden:

  • Langsame virtuelle Basiszeiger verwenden ("slow")
  • Klassenargumente im alten Stil
  • 'this' zuerst
  • VTable nach vorne
  • Konstruktor-Verschiebungen
  • Gültigkeitsbereich für for-Anweisung
  • Leere Klassen-Member-Funktion mit Länge null

Vorgabe = False

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

Neue Operatorennamen aktivieren

Ermöglicht neue Operatorennamen wie "and", "or", "and_eq", "bitand" usw. Vorgabe = False

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

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; //Fehler ohne diese Option
} //Ende des Blocks, der die for-Schleife enthält

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 die Option Gültigkeitsbereich für for-Anweisung aktiviert, 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

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

Globale Funktionen in Segmenten

Erzeugt alle globalen Funktionen in ihrem eigenen virtuellen oder schwachen Segment.
Vorgabe = True

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

Microsoft-Header-Suchalgorithmus

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

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

Nativer Quelltext für MBCS

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

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

Nicht konstante Aufrufe für konstantes Objekt

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

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

Nicht konstante Referenzbindung

Lässt die nicht konstante Referenzbindung zu.
Vorgabe = False

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

Nicht-konstante String-Literale

Behandelt String-Literale nicht als konstant.
Vorgabe = False

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

Alte 'using'-Regeln in Vorlagen

Verwendet die alten Borland-Regeln für "using" in Templates.
Vorgabe = False

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

Alte 8.3 Include-Suche

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

YesC++11Feature.png

Alte Auflösung für das Überladen

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

YesC++11Feature.png

Alte Typregeln für dreiteilige Operatoren

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

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

Multizeichenkonstanten umkehren

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

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

-Vb-Compiler-Optionen für BCC32/BCCOSX

Hinweis: Einige Kompatibilitätsoptionen haben Schalter (Optionen) für BCC32 und BCCOSX, die mit -Vb beginnen. BCC64 unterstützt diese Kompatibilitätsoptionen nicht. Die -Vb-Kompatibilitätsoptionen sind in der folgenden Tabelle zusammengefasst:

Befehlszeilenoptionen Bedeutung

-Va

Unterstützt Klassenargumente im alten Stil.

-Vb

Aktiviert alle -Vb-Optionen. Aktiviert die 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 und lässt qualifizierte Referenzen zu.

-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 oder nicht-volatile Member-Funktion für ein konstantes oder volatile Objekt zu.

-Vbo

Verwendet alte Borland-Auflösungsregeln für das Überladen.

-Vbr

Verwendet alte Borland-Regeln für die Referenzbindung.

-Vbs

Behandelt String-Literale als nicht konstant.

-Vbt

Verwendet alte Borland-Typregeln für dreiteilige Operatoren.

-Vbu

Verwendet alte Borland-Regeln für "using" in Templates.

-Vbx

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

Siehe auch