问题
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.
回答1:
Good overviews of C11 standard:
- https://en.wikipedia.org/wiki/C11_(C_standard_revision)
- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
- https://smartbear.com/blog/test-and-monitor/c11-a-new-c-standard-aiming-at-safer-programming/
The standard includes several changes to the C99 language and library specifications, such as:
- Alignment specification (
_Alignasspecifier,_Alignofoperator,aligned_allocfunction,<stdalign.h>header file) - The
_Noreturnfunction specifier and the<stdnoreturn.h>header file Type-generic expressions using the
_Generickeyword. For example, the following macrocbrt(x)translates tocbrtl(x),cbrt(x)orcbrtf(x)depending on the type ofx:#define cbrt(x) _Generic((x), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(x)Multi-threading support (
_Thread_localstorage-class specifier,<threads.h>header including thread creation/management functions, mutex, condition variable and thread-specific storage functionality, as well as the_Atomictype qualifier and<stdatomic.h>for uninterruptible object access).- Improved Unicode support based on the C Unicode Technical Report ISO/IEC TR 19769:2004 (
char16_tandchar32_ttypes for storingUTF-16/UTF-32encoded data, including conversion functions in<uchar.h>and the corresponding u and U string literal prefixes, as well as the u8 prefix forUTF-8encoded literals). - Removal of the
getsfunction, 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
#ifand#error, when types are understood by the translator. - An exclusive create-and-open mode (
"…x"suffix) foropen. This behaves likeO_CREAT|O_EXCLinPOSIX, which is commonly used for lock files. - The
quick_exitfunction as a third way to terminate a program, intended to do at least minimal deinitialization if termination withexitfails. - Macros for the construction of complex values (partly because
real + imaginary*Imight not yield the expected value ifimaginaryis infinite orNaN).
回答2:
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 thegetsfunction (<stdio.h>)
— added thealigned_alloc,at_quick_exit, andquick_exitfunctions (<stdlib.h>)
— (conditional) support for bounds-checking interfaces (originally specified in ISO/IEC TR 24731−1:2007)
— (conditional) support for analyzability
来源:https://stackoverflow.com/questions/38405260/difference-between-c99-and-c11