{"id":374,"date":"2012-01-02T22:45:15","date_gmt":"2012-01-02T21:45:15","guid":{"rendered":"http:\/\/blog.embedded-system-design.de\/?p=374"},"modified":"2012-01-02T22:45:15","modified_gmt":"2012-01-02T21:45:15","slug":"neuer-c-standard-c11-veroffentlicht","status":"publish","type":"post","link":"https:\/\/blog.embedded-system-design.de\/index.php\/2012\/01\/02\/neuer-c-standard-c11-veroffentlicht\/","title":{"rendered":"Neuer C11-Standard ver\u00f6ffentlicht"},"content":{"rendered":"<p>Scheinbar als Weihnachtsgeschenk ver\u00f6ffentlichte die ISO im Dezember 2011 den neuen C-Sprachstandard, ISO\/IEC 9899:2011.<\/p>\n<p>Diese neue &#8211; auch als C11 bekannte &#8211; Spezifikation, l\u00f6st den C99-Standard ab. Haupts\u00e4chlich werden darin Features standardisiert, die von zeitgen\u00f6ssischen Compilern bereits unterst\u00fctzt werden. Er beinhaltet u.a. ein detailliertes Speichermodell, um mehrere Ausf\u00fchrungspfade besser zu unterst\u00fctzen. Der <a title=\"C1X Draft\" href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg14\/www\/docs\/n1570.pdf\" target=\"_blank\">finale Entwurf<\/a> wurde im April 2011 ver\u00f6ffentlicht &#8211; hier ein paar der \u00c4nderungen gegen\u00fcber C99:<\/p>\n<ul>\n<li>Operatoren und Funktionen f\u00fcr das Alignment.<\/li>\n<li>Das Schl\u00fcsselwort <em>_Generic<\/em>f\u00fcr generische Ausdr\u00fccke: Damit lassen sich z.B. abh\u00e4ngig vom \u00fcbergebenen Typ verschiedene Funktionen aufrufen.\n<pre>#define foo(X) _Generic((X), long double: foo_ld, \\\n                             default: foo_dflt, \\\n                             float: foo_f)(X)<\/pre>\n<\/li>\n<li>Unterst\u00fctzung von Multithreading: Variablen k\u00f6nnen als <em>_Thread_local<\/em> deklariert werden. Funktionen zum Erzeugen und Verwalten von Threads wurden spezifiziert, sowie Mutex und Condition-Variablen. Der Qualifizierer <em>_Atomic<\/em> erm\u00f6glicht den unterbrechungsfreien Zugriff auf Daten.<\/li>\n<li>F\u00fcr eine bessere Unicode-Unterst\u00fctzung wurden die Datentypen <em>char16_t<\/em> und <em>char32_t<\/em> sowie Konvertierungsfunktionen standardisiert.<\/li>\n<li>Die unsichere Funktion <em>gets(char *s)<\/em> wurde aus dem Standard entfernt und durch eine sicherere Alternative <em>gets_s(<em>char *s, rsize_t n<\/em>)<\/em> ersetzt.<\/li>\n<li>Anonyme <em>struct<\/em> und <em>union<\/em>sind jetzt standardisiert: Das ist sehr hilfreich, wenn Strukturen und Unions verschachtelt werden, z.B.:\n<pre>struct T {\n  int type;\n  union { int n; float f; };\n};<\/pre>\n<\/li>\n<li>Das Schl\u00fcsselwort <em>_Static_assert<\/em>f\u00fcr Predikate, die zur \u00dcbersetzungszeit gepr\u00fcft werden.\n<pre>_Static_assert(sizeof(int)!=4, \"int is not 32-bit wide\");<\/pre>\n<\/li>\n<li>Datentyp f\u00fcr komplexe Zahlen.<\/li>\n<\/ul>\n<p>Der <a title=\"GNU Compiler Collection\" href=\"http:\/\/gcc.gnu.org\/\" target=\"_blank\">GCC Version 4.6<\/a> bietet bereits eine grundlegende Unterst\u00fctzung f\u00fcr den neuen Standard C11.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Scheinbar als Weihnachtsgeschenk ver\u00f6ffentlichte die ISO im Dezember 2011 den neuen C-Sprachstandard, ISO\/IEC 9899:2011. Diese neue &#8211; auch als C11 bekannte &#8211; Spezifikation, l\u00f6st den C99-Standard ab. Haupts\u00e4chlich werden darin Features standardisiert, die von zeitgen\u00f6ssischen Compilern bereits unterst\u00fctzt werden. Er beinhaltet u.a. ein detailliertes Speichermodell, um mehrere Ausf\u00fchrungspfade besser zu unterst\u00fctzen. Der finale Entwurf wurde &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/blog.embedded-system-design.de\/index.php\/2012\/01\/02\/neuer-c-standard-c11-veroffentlicht\/\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,16],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/374"}],"collection":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/comments?post=374"}],"version-history":[{"count":0,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/374\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/media?parent=374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/categories?post=374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/tags?post=374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}