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.