BCCIOSARM64
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.
Inhaltsverzeichnis
Allgemeine Informationen
Feld | Wert |
---|---|
Aufrufkonventionen | |
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
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.