Folgende Sprachmittel werden vom hier beschriebenen Compiler nicht oder nur eingeschränkt unterstützt:
Explizite Ausrichtung
Es gibt 3 Möglichkeiten, die Ausrichtung zu verändern: Das #pragma aligned
, das C11-Schlüsselwort _Alignas
und das C++-Schlüsselwort alignas
. Diese Möglichkeiten wirken nur für Strukturelemente. Sie wirken nicht auf einfache Variablen.
Deklaration ohne Typ
Im Sprachmodus C11 muss jede Deklaration einen expliziten Typ haben. In C89 konnte der Typ fehlen, es wurde dann int
angenommen. Fehlt der Typ, so kommt im Modus C11 ein Fehler, der zu einer Warnung herabgestuft werden kann.
Beispiel
% CFE1260[*ERROR]: x.c / 3: explicit type is missing ("int" assumed) const var1 = 7; ^ % CFE1077[*ERROR]: x.c / 5: this declaration has no storage class or type specifier var2; ^ % CFE1260[*ERROR]: x.c / 7: explicit type is missing ("int" assumed) extern function (int a); ^ % CFE1260[*ERROR]: x.c / 9: explicit type is missing ("int" assumed) function2 (int a); ^
Unicode
Unter dem Begriff Unicode ist ein Standard gemeint, der für viele Zeichen der Welt eine binäre Darstellung angibt. Der Standard spezifiziert mehr als 100.000 verschiedene Zeichen. Der Standard definiert mehrere Darstellungen, die bekanntesten sind UTF-8 und UTF-16. In diesen Darstellungen sind die meisten Zeichen durch mehr als 1 Byte repräsentiert.
Der C11 Standard hat Sprachmittel geschaffen, um diese Zeichen im Sourcecode zu beschreiben: Zeichen mit \u, Typen für Unicode-Zeichen und Literale in Unicode. Diese Sprachmittel werden vom C/C++ 4.0 Compiler unterstützt.
Zu beachten ist jedoch, dass die Funktionen des CRTE nur Zeichen und Strings des normalen EBCDIC oder ASCII unterstützen. Dabei wird angenommen, dass jedes Zeichen in einem Byte dargestellt wird. Dies bedeutet, dass die CRTE-Funktionen zur Bearbeitung von Unicode-Strings nicht geeignet sind.
Float-Format IEEE
Der Standard IEC 60559 wird vom Compiler nicht unterstützt. Der Compiler erlaubt es zwar, Float-Konstanten in dem IEEE-Format abzulegen. Es fehlen jedoch einige Funktionen zur Konfiguration des Verhaltens. Auch werden die Werte infinity und NaN nicht sinnvoll unterstützt. Im Zusammenhang mit diesen Werten kann es zu seltsamem Verhalten kommen.
Unterstützung von Threads
Der C/C++ Compiler unterstützt kein bestimmtes Thread-Paket. Im Detail heisst dies, dass die Header <threads.h> und <stdatomic.h> nicht vorhanden sind. Die Schlüsselworte _Thread_local
und _Atomic
führen im Modus C11 zu einer Fehlermeldung. Die Prädefines __STDC_NO_THREADS__
und __STDC_NO_ATOMICS__
sind gesetzt.
Komplexe Zahlen
Der C/C++ Compiler unterstützt nicht die im C11 Standard erwähnten komplexen Zahlen. Im Detail heisst dies, dass der Header <complex.h> nicht unterstützt wird. Der im CRTE vorhandene Header <complex.h> wird für komplexe Zahlen in C++ verwendet, seine Verwendung in C führt zu einer Fehlermeldung. Die Schlüsselworte _Complex
und _Imaginary
führen im Modus C11 zu einer Fehlermeldung. Das Prädefine __STDC_NO_COMPLEX__
ist gesetzt.
C11 Anhang K
Im C11-Standard, Anhang K werden Funktionen beschrieben, die unter den Begriff "Bounds-checking interfaces" fallen. Diese Funktionen werden nicht angeboten.
C11 Anhang L
Im C11-Standard, Anhang L werden Funktionen beschrieben, die unter den Begriff "Analyzability" fallen. Diese Funktionen werden nicht angeboten.