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.
C11 (formerly C1X) is an informal name for ISO/IEC 9899:2011, a past standard for the C programming language. It replaced C99 (standard ISO/IEC 9899:1999) and has been superseded by C17 (standard ISO/IEC 9899:2018).
For the typical C programmer, the biggest change in C11 is its standardized multithreading support. C of course has supported multithreading for decades. However, all of the popular C threading libraries have thus far been non-standard extensions, and hence non-portable. The new C11 header file <threads.
C99 is a standard of the C language published by ISO and adopted by ANSI in around 1999. GNU C is just an extension of c89,while some features of c99 are also added,but in entirety it is different from c99 standard so when compiling in gcc we have to enter -std=c99 which is already mentioned in the other answers.
With C11, seven more keywords were added to the C programming language, thereby making the total number of keywords, 44. The seven keywords added to C99 are _Alignas, _Alignof, _Atomic, _Generic, _Noreturn, _Static_assert and _Thread_local.
Good overviews of C11 standard:
The standard includes several changes to the C99 language and library specifications, such as:
_Alignas
specifier, _Alignof
operator, aligned_alloc
function, <stdalign.h>
header file)_Noreturn
function specifier and the <stdnoreturn.h>
header fileType-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).
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).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
.struct T { int tag; union { float x; int n; }; };
.#if
and #error
, when types are understood by the translator."…x"
suffix) for open
. This behaves like O_CREAT|O_EXCL
in POSIX
, which is commonly used for lock files.quick_exit
function as a third way to terminate a program, intended to do at least minimal deinitialization if termination with exit
fails.real + imaginary*I
might not yield the expected value if imaginary
is infinite or NaN
).If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With