Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Restrictions to ANSI/ISO C

&pagelevel(4)&pagelevel

The following language elements are not supported by the compiler described here, or only to a limited extent.

Alignment

The compilers offers three ways to increase an alignment: #pragma aligned, the keyword _Alignas in C11 and the keyword alignas in C++17. These can be used to increase the alignment for struct members only. There is no effect on variables.

Declarations without type

In language mode C11, each declaration must have an explicit type. The type could be missing in C89, then int was assumed. If the type is missing, an error occurs in mode C11 that can be downgraded to a warning.

Example

%  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

The term Unicode means a standard that specifies a binary representation for many characters in the world. The standard specifies more than 100,000 different characters. The standard defines several representations, the best known are UTF-8 and UTF-16. In these representations, most characters are represented by more than 1 byte.
The C11 standard has created language elements to describe these characters in the source code: characters with \u, types for Unicode characters and literals in Unicode. These language resources are supported by the C/C++ 4.0 compiler.
However, it should be noted that the functions of the CRTE only support characters and strings from normal EBCDIC or ASCII. It is assumed that each character is represented in a byte. This means that the CRTE functions are not suitable for processing Unicode strings.

Floating point format IEEE

The compiler does not support the IEC 60559 standard. The compiler allows you to store float constants in the IEEE format, however, some configuration functions are missing. The values ​​infinity and NaN are also not supported meaningfully. Using these values can lead to strange behavior.

Thread support

The C/C++ compiler does not support a specific thread package. In detail, this means that the headers <threads.h> and <stdatomic.h> are not available. The keywords _Thread_local and _Atomic lead to an error message in mode C11. The predefines __STDC_NO_THREADS__ and __STDC_NO_ATOMICS__ are set.

Complex numbers

The C/C++ compiler does not support the complex numbers mentioned in the C11 standard. In detail, this means that the header <complex.h> is not supported. The <complex.h> header in the CRTE is used for complex numbers in C++, its use in C leads to an error message. The keywords _Complex and _Imaginary lead to an error message in mode C11. The predefine __STDC_NO_COMPLEX__ is set.

C11 Appendix K

The C11 standard, Appendix K, describes functions that fall under the term "Bounds-checking interfaces". These functions are not offered.

C11 Appendix L

The C11 standard, Appendix L, describes functions that fall under the term "Analyzability". These functions are not offered.