23.122011

Neuer C Standard veröffentlicht

Der veröffentlichte Standard, informell C1X, folgt weitgehend dem dritten Entwurf N1570; in den dort aufgelisteten Änderungen begeistern mich vor allem

  • Unterstützung von threads mit thread-local storage, atomic objects

Die Implementierungen der Compiler gehen hier aktuell noch auseinander – eine Vereinheitlichung ist sehr zu begrüßen. stdatomics.h stellt Macros, Typen und Funktionen für atomare Operationen zur Verfügung. threads.h enthält Macros, Typen und Funktionen für Threads, Conditions, Mutexs, thread-specific storage, …

  • Unicode

uchar.h definiert Typen (char16_t, char32_t) und Funktionen um Unicodecharacter mit der wide/multibyte character Infrastruktur korrekt behandeln zu können. String literals können explizit als UTF-8 encodiert markiert werden

char *cs = u8"Ein UTF-8 String: äöü߀";
  • statische Zusicherungen

Erlaubt das Prüfen von Expressions die zu 0, falsch, oder !=0, wahr, evaluieren während der Übersetzung – z.B. können Größen- oder Aligmentanforderungen während des Compilevorganges geprüft werden und müssen nicht zur Laufzeit durch assert geprüft werden:

_Static_assert( sizeof(unsignedlong) > sizeof(int),
                "sizeof(unsigned long) must be greater than sizeof(int)");
  • anonmyme structs und unions

Erlauben es, komplexe Strukturen lesbar aufzuschreiben. Ein nicht ganz so komplexes Beispiel aus dem Standard:

structv {
    union {      // anonymous unionstruct { inti, j; };    // anonymous structurestruct { longk, l; } w;
    };
    intm;
} v1;
  • Zeilenkommentare mit //

Endlich kann man sie nutzen und Kritiker auf den neuen Standard verweisen.

Der Standard kann für 338 Schweizer Franken (aktuell ca. 277,-€) bei der ISO erworben werden.