41

I am learning c, presently. The book I read is C99 based. I want to update my knowledge to C11 after finishing this book, or change resource if there is a major difference. Thus, what I ask is for is an explanation or resource to update my knowledge. I only found this source. Nevertheless, it does not seem to encompass the information I need or not concise.

Thanks in advance. P.S: I want to learn C11 since I think it is the prevalent standard now. If not, please inform me.

Community
  • 1
  • 1
  • 7
    I don't think you should worry about it too much at the current stage. – Eugene Sh. Jul 15 '16 at 21:29
  • 2
    Well, there's [Wikipedia](https://en.wikipedia.org/wiki/C11_%28C_standard_revision%29). – yellowantphil Jul 15 '16 at 21:30
  • About 12 years of improvements, after a lot of negotiations. This primarily means additional features, which can be useful in specific situations; but, in order to keep C code portable to the next version, are mostly not likely to break any code you write in C99 or they'd lose their developer base. – Edwin Buck Aug 25 '19 at 15:23

2 Answers2

44

Good overviews of C11 standard:

The standard includes several changes to the C99 language and library specifications, such as:

  • Alignment specification (_Alignas specifier, _Alignof operator, aligned_alloc function, <stdalign.h> header file)
  • The _Noreturn function specifier and the <stdnoreturn.h> header file
  • Type-generic expressions using the _Generic keyword. For example, the following macro cbrt(x) translates to cbrtl(x), cbrt(x) or cbrtf(x) depending on the type of x:

    #define cbrt(x) _Generic((x), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(x)
    
  • Multi-threading support (_Thread_local storage-class specifier, <threads.h> header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as the _Atomic type qualifier and <stdatomic.h> for uninterruptible object access).

  • Improved Unicode support based on the C Unicode Technical Report ISO/IEC TR 19769:2004 (char16_t and char32_t types for storing UTF-16/UTF-32 encoded data, including conversion functions in <uchar.h> and the corresponding u and U string literal prefixes, as well as the u8 prefix for UTF-8 encoded literals).
  • Removal of the gets function, deprecated in the previous C language standard revision, ISO/IEC 9899:1999/Cor.3:2007(E), in favor of a new safe alternative, gets_s.
  • Bounds-checking interfaces (Annex K).
  • Analyzability features (Annex L).
  • More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store.
  • Anonymous structures and unions, useful when unions and structures are nested, e.g. in struct T { int tag; union { float x; int n; }; };.
  • Static assertions, which are evaluated during translation at a later phase than #if and #error, when types are understood by the translator.
  • An exclusive create-and-open mode ("…x" suffix) for open. This behaves like O_CREAT|O_EXCL in POSIX, which is commonly used for lock files.
  • The quick_exit function as a third way to terminate a program, intended to do at least minimal deinitialization if termination with exit fails.
  • Macros for the construction of complex values (partly because real + imaginary*I might not yield the expected value if imaginary is infinite or NaN).
Seth Robertson
  • 30,608
  • 7
  • 64
  • 57
Evgeny Karkan
  • 8,782
  • 2
  • 32
  • 38
9

Per the C 2011 standard itself, here are the major changes from C99:

Foreword
...
6     This third edition cancels and replaces the second edition, ISO/IEC 9899:1999, as corrected by ISO/IEC 9899:1999/Cor 1:2001, ISO/IEC 9899:1999/Cor 2:2004, and ISO/IEC 9899:1999/Cor 3:2007. Major changes from the previous edition include:

     — conditional (optional) features (including some that were previously mandatory)

     — support for multiple threads of execution including an improved memory sequencing model, atomic objects, and thread-local storage (<stdatomic.h> and <threads.h>)

     — additional floating-point characteristic macros (<float.h>)

     — querying and specifying alignment of objects (<stdalign.h>, <stdlib.h>)

     — Unicode characters and strings (<uchar.h>) (originally specified in ISO/IEC TR 19769:2004)

     — type-generic expressions

     — static assertions

     — anonymous structures and unions

     — no-return functions

     — macros to create complex numbers (<complex.h>)

     — support for opening files for exclusive access

     — removed the gets function (<stdio.h>)

     — added the aligned_alloc, at_quick_exit, and quick_exit functions (<stdlib.h>)

     — (conditional) support for bounds-checking interfaces (originally specified in ISO/IEC TR 24731−1:2007)

     — (conditional) support for analyzability
John Bode
  • 119,563
  • 19
  • 122
  • 198
  • 3
    The link is to the N1570 draft of the C11 standard. Some very minor changes were made between that draft and the final released standard. – Keith Thompson Jul 15 '16 at 22:20
  • 3
    The C11 standard itself is only available for purchase so, for people like me, @JohnBode, and the general public, N1570 is the best we've got for C11 (without paying money). See [ISO/IEC 9899 - Programming languages - C](http://www.open-std.org/jtc1/sc22/wg14/www/standards) –  Aug 21 '19 at 14:55