Neuer C11-Standard veröffentlicht

Scheinbar als Weihnachtsgeschenk veröffentlichte die ISO im Dezember 2011 den neuen C-Sprachstandard, ISO/IEC 9899:2011.

Diese neue – auch als C11 bekannte – Spezifikation, löst den C99-Standard ab. Hauptsächlich werden darin Features standardisiert, die von zeitgenössischen Compilern bereits unterstützt werden. Er beinhaltet u.a. ein detailliertes Speichermodell, um mehrere Ausführungspfade besser zu unterstützen. Der finale Entwurf wurde im April 2011 veröffentlicht – hier ein paar der Änderungen gegenüber C99:

  • Operatoren und Funktionen für das Alignment.
  • Das Schlüsselwort _Genericfür generische Ausdrücke: Damit lassen sich z.B. abhängig vom übergebenen Typ verschiedene Funktionen aufrufen.
    #define foo(X) _Generic((X), long double: foo_ld, \
                                 default: foo_dflt, \
                                 float: foo_f)(X)
  • Unterstützung von Multithreading: Variablen können als _Thread_local deklariert werden. Funktionen zum Erzeugen und Verwalten von Threads wurden spezifiziert, sowie Mutex und Condition-Variablen. Der Qualifizierer _Atomic ermöglicht den unterbrechungsfreien Zugriff auf Daten.
  • Für eine bessere Unicode-Unterstützung wurden die Datentypen char16_t und char32_t sowie Konvertierungsfunktionen standardisiert.
  • Die unsichere Funktion gets(char *s) wurde aus dem Standard entfernt und durch eine sicherere Alternative gets_s(char *s, rsize_t n) ersetzt.
  • Anonyme struct und unionsind jetzt standardisiert: Das ist sehr hilfreich, wenn Strukturen und Unions verschachtelt werden, z.B.:
    struct T {
      int type;
      union { int n; float f; };
    };
  • Das Schlüsselwort _Static_assertfür Predikate, die zur Übersetzungszeit geprüft werden.
    _Static_assert(sizeof(int)!=4, "int is not 32-bit wide");
  • Datentyp für komplexe Zahlen.

Der GCC Version 4.6 bietet bereits eine grundlegende Unterstützung für den neuen Standard C11.

 

Schreibe einen Kommentar