BCCIOSARM64

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Durch Clang erweiterte C++-Compiler


BCCIOSARM64 ist der C++-Compiler von RAD Studio für 64-Bit-iOS.

BCCIOSARM64 basiert auf Clang 3.3.1. Weitere Informationen zu Gemeinsamkeiten des BCCIOSARM64-Compilers mit anderen C++-Compilern, die durch Clang erweitert wurden, finden Sie unter Durch Clang erweiterte C++-Compiler.

Hinweis: BCCIOSARM64 unterstützt den iOS-Simulator nicht. Der iOS-Simulator führt eine besondere, Nicht-ARM-Version von iOS aus. RAD Studio stellt keinen C++-Compiler für den iOS-Simulator bereit.


Allgemeine Informationen

Feld Wert
Aufrufkonventionen

Apple AAPCS (EN)

Ergänzen von Namen Itanium (EN) (mit geringfügigen Abweichungen)
Standardbibliothek LLVM libc++ (EN)

Ausgabedateien

Dateityp Dateierweiterung Dateiformat
Ausführbar Mach-O (EN)
Gemeinsame Bibliothek N/A¹
Statische Bibliothek .a ar (EN)
Compiliertes Objekt .o Mach-O (EN)
Hinweis: iOS unterstützt Anwendungen, die gemeinsame Bibliotheken enthalten, nicht.

Schreiben von C++-Code für BCCIOSARM64

Um C++-Code speziell für BCCIOSARM64 zu schreiben, verwenden Sie Folgendes:

#if defined(__APPLE__) && defined(__arm64__)
    // Your code.
#endif
Hinweis: Hierbei handelt es sich um Compiler-spezifischen Code. Auf diese Art und Weise sollten Sie iOS-spezifischen Code nicht schreiben. Siehe Erstellen von iOS-Apps, Schreiben von Code nur für iOS.

Weitere Informationen finden Sie unter Durch Clang erweiterte C++-Compiler, Vordefinierte Makros.

Implementierung bestimmter Datentypen in BCCIOSARM64

Die 64-Bit-Laufzeitumgebung unter iOS ändert die Größe von vielen integrierten Datentypen. In diesem Abschnitt wird die Verwendung der folgenden Delphi-Daten in C++-Code für 64-Bit-iOS-Geräte erläutert:

NativeInt

Auf der iOS64-Plattform ist der Delphi-Typ NativeInt über den Typ long implementiert. Dies könnte sich auf Code auswirken, der Konstanten enthält. Um Mehrdeutigkeiten zu vermeiden, muss im Code das Suffix L, wie im folgenden Codefragment gezeigt, verwendet werden:


NativeInt ni;
#if defined(_PLAT_IOS64)
  if (ni == 99L)
#else
  if (ni == 99)
#endif


Hinweis: Im obigen Codefragment wäre der Code ohne das Suffix L auf der iOS64-Plattform mehrdeutig.


TypeInfo

In Delphi-Code gibt die Funktion TypeInfo einen Zeiger auf den RTTI-Block (Laufzeit-Typinformationen) zurück, der einen gegebenen Typ beschreibt. Diese Funktion ist jedoch in C++Builder nicht verfügbar. In C++-Code müssen Sie stattdessen das Schlüsselwort __delphirtti verwenden.

Unter iOS64 gibt die Funktion TypeInfo für einen long-Typ ein Typeinfo der Art System::tkInt64 zurück. Auf anderen Plattformen gibt die Funktion ein Typeinfo der Art System::tkInteger zurück. Sehen Sie sich zur Klärung das folgende Codefragment an:

System::Typinfo::PTypeInfo ti;
    ti = __delphirtti(long);
#if defined(_PLAT_IOS64)
    assert(ti->Kind == System::tkInt64);
    assert(pData->MinInt64Value == -9223372036854775808L);
    assert(pData->MaxInt64Value == 9223372036854775807L);
#else
    assert(ti->Kind == System::tkInteger);
    assert(pData->OrdType == System::Typinfo::otSLong);
    assert(pData->MinValue == -2147483648);
    assert(pData->MaxValue == 2147483647);
#endif

Die oben erwähnten Typeinfo-Unterschiede können bei der Interaktion mit einem Server eine Inkompatibilität des iOS64-Client-Codes verursachen. Wenn Sie beispielsweise einen long-Typ per SOAP senden, serialisiert die iOS64-Plattform diesen Typ als XML-long, während andere Plattformen ihn als XML-int serialisieren.

Die folgende Tabelle zeigt beispielsweise den XML-Code, der produziert wird, wenn ein long-Typ von einem Win32- und einem iOS64-Client gesendet wird:

iOS64   WIN32  
<V xsi:type="xsd:long">-1000</V> <V xsi:type="xsd:int">-1000</V>

Die meisten Laufzeitumgebungen konvertieren bei der Deserialisierung den XML-Code transparent zurück in den geeigneten Typ. Aufgrund der Bereichsunterschiede zwischen "xml:long" und "xml:int" könnte ein iOS64-Client jedoch einen Wert senden, der von einem WIN32-Empfänger abgeschnitten wird.

Siehe auch