C++-Compiler Erweitert

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu C++-Compiler


Projekt > Optionen > C++-Compiler > Erweitert

In diesem Dialogfeld legen Sie erweiterte 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.


Assembler-Optionen

Assembler-Optionen Beschreibung Compiler-Unterstützung
bcc32 bcc32c bcc64 bccosx bcciosarm bcciosarm64 bccaarm

Assembler-Optionen

Geben Sie zusätzliche Assembler-Optionen (wie z. B. -TX oder -T) ein, die für das aktuelle Projekt verwendet werden sollen. Übergibt die angegebenen Optionen an den Assembler, der mit der Option Zu verwendenden Assembler festlegen festgelegt wurde, oder an den Standard-Assembler (TASM32 in 32-Bit-Windows).

32-Bit-Compiler, die durch Clang erweitert wurden, erstellen keine Assembly-Dateien, die mit TASM32 assembliert werden können.

YesC++11Feature.png

In .ASM compilieren, dann in .OBJ zusammenstellen

Veranlasst, dass der Compiler zunächst aus dem C++-Quelltext (oder C-Quelltext) eine .ASM-Datei erzeugt. Dann ruft der Compiler TASM32 (oder den mit der Option Zu verwendenden Assembler festlegen angegebenen Assembler) auf, um eine .OBJ-Datei aus der .ASM-Datei zu erstellen. Die .ASM-Datei wird anschließend gelöscht.

Das Programm kann nicht mit der Option -B compiliert werden, wenn im C- oder C++-Quelltext statische globale Variablen deklariert werden, die Schlüsselwörter in der Assembler-Sprache sind. Der Compiler stellt nämlich statischen globalen Variablen keinen Unterstrich voran (wie bei anderen Variablen), und die Assembler-Schlüsselwörter erzeugen Fehler, wenn der Code zusammengestellt wird. Der Vorgabewert ist False.

YesC++11Feature.png

Zu verwendenden Assembler festlegen

Stellt Anweisungen zusammen und verwendet dabei den angegebenen Dateinamen als Assembler. Der 32-Bit-Windows-Compiler verwendet TASM32 als Standard-Assembler. Die Ellipse-Popup-Schaltfläche ist unter Gemeinsame Elemente auf den Projektoptionsseiten beschrieben.

YesC++11Feature.png

Gleitkomma-Optionen

Gleitkomma-Optionen Beschreibung Compiler-Unterstützung
  bcc32     bcc32c     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

FDIV-Fehler korrigieren

Einige Pentium-Prozessoren der ersten Serie führen bestimmte Gleitkommadivisionen nicht mit voller Genauigkeit aus. Auch wenn die Chancen gering sind, dass dieses Problem heute noch auftaucht, kann mit dieser Option Code eingefügt werden, der eine Gleitkommaoperation so emuliert, dass sicher das richtige Ergebnis geliefert wird. Die Geschwindigkeit der Ausführung des Prozessorbefehls FDIV sinkt dann allerdings. Diese Option korrigiert FDIV-Befehle nur in Modulen, die Sie compilieren. Die Laufzeitbibliothek enthält ebenfalls FDIV-Befehle, die von dieser Option nicht verändert werden. Wenn Sie das Problem auch in den Laufzeitbibliotheken beheben möchten, müssen Sie sie mit dieser Einstellung neu compilieren.

Die folgenden Funktionen verwenden FDIV-Befehle der Assembler-Sprache und werden von dieser Option nicht korrigiert:

acos, acosl, acos, asin, asinl, atan, atan2, atan2l, atanl, cos, cosh, coshl, cosl, exp, expl, fmod, fmodl, pow, pow10, pow10l, powl, sin, sinh, sinhl, sinl, tan, tanh, tanhl, tanl

Funktionen, die eine Gleitkommazahl in einen String konvertieren oder umgekehrt (z. B. printf oder scanf), werden von dieser Option ebenfalls nicht korrigiert.
Der Vorgabewert ist False.

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

Schnelles Gleitkomma

Gleitkommaoperationen können ohne Berücksichtigung expliziter oder impliziter Typkonvertierungen optimiert werden. Berechnungen werden dann schneller als im ANSI-Modus durchgeführt.

Diese Option dient dazu, bestimmte Optimierungen zu ermöglichen, die auf technischer Ebene keiner korrekten C-Semantik entsprechen.

double x; x = (float) (3.5*x);

Um dies korrekt ausführen zu können, wird x mit 3,5 multipliziert. Das daraus resultierende Double wird entsprechend der Gleitkommagenauigkeit gekürzt und dann als Double in x gespeichert. Bei der schnellen Gleitkommaoperation wird das lange Double-Produkt direkt in ein Double konvertiert. Da nur wenige Programme auf diese hohe Genauigkeit angewiesen sind, ist das schnelle Gleitkomma die Standardeinstellung.

Wenn diese Option deaktiviert ist , folgt der Compiler strikt den ANSI-Regeln zur Gleitkommakonvertierung.
Der Vorgabewert ist True.

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

Stille Gleitkommavergleiche

Verwendet die stille Gleitkommaanweisung (FUCOMP).

Der Vorgabewert ist True.

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

Weitere Optionen

Weitere Optionen Beschreibung Compiler-Unterstützung
     bcc32           bcc32c          bcc64         bccosx         bcciosarm         bcciosarm64         bccaarm    

Weitere Optionen für die Übergabe an den Compiler

Geben Sie weitere Compiler-Optionen ein, die für das aktuelle Projekt hinzugefügt werden sollen.

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

Codeseite

Legt den Standardzeichensatz für Text fest, der im ANSI-Quellcode verwendet wird, wenn der Quellcode kein BOM (Byte Order Mark) enthält.

Bietet Unterstützung für benutzerdefinierte Codeseiten. Damit wird dem Compiler mitgeteilt, wie Multibyte-Zeichensätze (MBCS) analysiert und konvertiert werden sollen.

Im Eingabefeld können Sie Folgendes angeben:

  • Die tatsächliche Codeseitennummer. Zum Beispiel:
    • 1250 für europäisch
    • 932 für japanisch
  • Textbezeichner für die Codeseitencodierungen, wie UTF8, UTF32 oder SJIS (für Shift-JIS für japanisch)

Wenn Sie beispielsweise 65001 oder UTF8 für die Option -CP angeben, unterstützt der Compiler die UTF8-Codierung für Quellcode ohne BOM.

Es gibt zwei wesentliche Bereiche, wo Codeseiten eine Rolle spielen:

  • String-Konstanten, Kommentare, #error- und #pragma-Direktiven
Für MBCS-Strings, die zu dieser Gruppe gehören, müssen Sie die korrekte Codeseite mit einem Aufruf der Windows-API-Funktion IsDBCSLeadByteEx angeben. Mit dieser Funktion geben Sie die Codeseite an, um die MBCS-Strings für eine bestimmte Gebietseinstellung korrekt zu analysieren (z. B. kann der Compiler damit Backslashes in nachgestellten MBCS-Bytes korrekt analysieren).
  • Wide-Zeichen-String-Konstanten
Für MBCS-Strings, die zu dieser Gruppe gehören (Wide-Zeichen-String-Konstanten), geben Sie die korrekte Codeseite an, um die MBCS-Strings mit der Windows-API-Funktion MultiByteToWideChar in Unicode-Strings umzuwandeln.


Es gelten folgende Regeln:

  1. Bei der Einstellung des Code-Paging müssen die numerischen Werte zu den Werten der Microsoft NLS Code Page ID passen. Zum Beispiel:
    • Verwenden Sie 437 für MS-DOS-Anwendungen aus den Vereinigten Staaten.
    • Verwenden Sie 932 für japanische.
  2. Der numerische Wert nnnn muss eine gültige Codeseite sein, die vom Betriebssystem unterstützt wird.
  3. Benutzer müssen eventuell die relevanten Windows NLS-Dateien installieren, um sicherzustellen, dass asiatische Gebietseinstellungen und Codeseiten zugänglich sind. Nähere Informationen hierzu finden Sie in der Dokumentation zu Microsoft NLS Code Page.
  4. Wenn Sie keinen Codeseitenwert angeben, ruft der Compiler die Windows-API-Funktion GetACP auf, um die Standard-Codeseite des Systems zu ermitteln. Dieser Wert wird dann verwendet, wenn Strings wie oben dargestellt behandelt werden müssen.

Die Vorgabe ist, keine Codeseite zu verwenden.

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

Ausführungszeichensatz

Legt den Ausführungszeichensatz fest, der für ANSI-Strings in der ausführbaren Datei verwendet wird.

Die Option Ausführungszeichensatz ist für die Verwendung in geräteübergreifenden Anwendungen konzipiert.
Für den Windows-Host oder ein Windows-Ziel entspricht die Standardtextcodierung der ANSI-Codierung (der Option Codeseite) der Anwendung.
Bei geräteübergreifenden Anwendungen kann die ANSI-Codierung des Ziels von der ANSI-Codierung des Host abweichen.
POSIX-Systeme (einschließlich OS X und das neueste Linux) verwenden z. B. UTF8 als Systemcodierung, daher muss der Ausführungszeichensatz "UTF8" sein. Wenn Sie eine Anwendung mit "932" als Ausführungszeichensatz compilieren, werden alle String-Literale in der "932"-Codierung (japanisches SJIS) codiert, ungeachtet dessen, ob die Compilier-Umgebung "932" ist. Wide-String-Literale (z. B. L"Test") sind von dieser Option nicht betroffen.

In manchen Fällen wird der Wert der Option Codeseite für die Option Ausführungszeichensatz verwendet. Die folgende Matrix verdeutlicht die Beziehung zwischen den Optionen Codeseite und Ausführungszeichensatz:

Ist die Option festgelegt? Beschreibung
Codeseite Ausführungszeichensatz
  • Für Windows-Ziele verwendet der Compiler die Windows-Systemcodeseite (CP_ACP) als Textzeichensatz und als Ausführungszeichensatz.
  • Für Mac OS X-Ziele verwendet der Compiler die Windows-Systemcodeseite (CP_ACP) als Textzeichensatz und UTF-8 als Ausführungszeichensatz auf Mac OS X.
YesC++11Feature.png

Der Compiler verwendet den Wert der Codeseite als Textzeichensatz und als Ausführungszeichensatz.

YesC++11Feature.png

Der Compiler verwendet den Wert des Ausführungszeichensatzes als Ausführungszeichensatz und die Systemcodeseite (CP_ACP) für ein Windows-Ziel oder eine plattformspezifische Codierung für ein plattformübergreifendes Ziel (LC_CTYPE auf Mac OS X).

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

Der Compiler verwendet den Wert der Codeseite als Textzeichensatz und den Wert des Ausführungszeichensatzes als Ausführungszeichensatz.

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

Minimale fortlaufende Blockgröße für Speicherzuweisung

Gibt die minimale Größe an, die für die fortlaufende Speicherzuweisung verwendet wird.

Der Vorgabewert ist (no =nMB). Das bedeutet, dass der größtmögliche Block verwendet wird.

Diese Option können Sie beispielsweise zum Compilieren von großen Projekten ohne PCH oder für sehr große (evtl. vom Computer erzeugte) Quelldateien verwenden, solche, die umfangreichen Quelltext enthalten, der zu vielen Deklarationen pro Datei führt.

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

Vorzeichenloser char-Typ

Der Compiler behandelt die char-Deklarationen so, als würde es sich um einen unsigned char-Typ (vorzeichenloser Zeichentyp) handeln, der für die Kompatibilität mit anderen Compilern sorgt.
Vorgabe = False (char-Typ mit Vorzeichen).

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

Universelle iOS-Binärdatei generieren (armv7 + arm64)

Der Compiler erstellt eine universelle Binärdatei für 32-Bit- und 64-Bit-iOS.
Die Vorgabe ist False (nur eine 64-Bit-Binärdatei wird erstellt).

YesC++11Feature.png

Quelltextoptionen

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

Verschachtelte Kommentare aktivieren

Verschachtelt Kommentare in C- und C++-Quelltextdateien. Solche Kommentare sind in Standard-C-Implementierungen nicht zulässig, und sie sind auch nicht portierbar.


Der Vorgabewert ist False.

Hinweis: Sie können mit konditionalen Compilier-Direktiven große Codeblöcke, die Kommentare enthalten, in Kommentare umwandeln:

 #if 0
 // ...
 /* ... */
 #endif
YesC++11Feature.png
YesC++11Feature.png

Bezeichnerlänge

Gibt die Anzahl signifikanter Zeichen (jene, die vom Compiler erkannt werden) in einem Bezeichner an. Mit Ausnahme von C++, wo es für Bezeichner keine Längenbeschränkung gibt, werden Bezeichner nur dann als unterschiedlich angesehen, wenn sie sich in den signifikanten Zeichen unterscheiden. Dies betrifft Variablen, Namen von Präprozessor-Makros und Namen von Struktur-Membern.

Gültige Werte für die Länge sind 0 und 8 bis 250, wobei 0 die Maximallänge von 250 Zeichen bedeutet. Appmethod C++ unterscheidet standardmäßig 250 Zeichen pro Bezeichner. Andere Systeme (darunter auch einige UNIX-Compiler) ignorieren das neunte und alle folgenden Zeichen. Wenn Sie eine Anwendung auf andere Systeme portieren möchten, sollten Sie den Quelltext mit einer kleineren Anzahl signifikanter Zeichen compilieren. So können Sie Namenskonflikte in langen Bezeichnern aufspüren, die abgeschnitten wurden. Der Vorgabewert beträgt 250.

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

String-Optionen

String-Optionen Beschreibung Compiler-Unterstützung
  bcc32     bcc32c     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

Doppelte Strings zusammenführen

Verbindet zwei literale Strings, wenn einer mit dem anderen identisch ist. Daraus entstehen kleinere Programme, die jedoch etwas mehr Zeit zum Compilieren benötigen. Fehler können dann entstehen, wenn einer der Strings verändert wird.
Der Vorgabewert ist False.

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

Schreibgeschützte Strings

Stellt für Strings zugewiesenen Speicher in das schreibgeschützte Datensegment. Der Vorgabewert ist False.

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

Schreibbare Strings

Stellt für Strings zugewiesenen Speicher in das beschreibbare Datensegment.
Der Vorgabewert ist False.

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

Siehe auch