1 1 6 Extensions to the C Language Family 1 ************************************* 1 1 GNU C provides several language features not found in ISO standard C. 1 (The '-pedantic' option directs GCC to print a warning message if any of 1 these features is used.) To test for the availability of these features 1 in conditional compilation, check for a predefined macro '__GNUC__', 1 which is always defined under GCC. 1 1 These extensions are available in C and Objective-C. Most of them are 11 also available in C++. ⇒Extensions to the C++ Language C++ Extensions, for extensions that apply _only_ to C++. 1 1 Some features that are in ISO C99 but not C90 or C++ are also, as 1 extensions, accepted by GCC in C90 mode and in C++. 1
1 · Statement Exprs Putting statements and declarations inside expressions. · Local Labels Labels local to a block. · Labels as Values Getting pointers to labels, and computed gotos. · Nested Functions As in Algol and Pascal, lexical scoping of functions. · Constructing Calls Dispatching a call to another function. · Typeof 'typeof': referring to the type of an expression. · Conditionals Omitting the middle operand of a '?:' expression. · __int128 128-bit integers--'__int128'. · Long Long Double-word integers--'long long int'. · Complex Data types for complex numbers. · Floating Types Additional Floating Types. · Half-Precision Half-Precision Floating Point. · Decimal Float Decimal Floating Types. · Hex Floats Hexadecimal floating-point constants. · Fixed-Point Fixed-Point Types. · Named Address SpacesNamed address spaces. · Zero Length Zero-length arrays. · Empty Structures Structures with no members. · Variable Length Arrays whose length is computed at run time. · Variadic Macros Macros with a variable number of arguments. · Escaped Newlines Slightly looser rules for escaped newlines. · Subscripting Any array can be subscripted, even if not an lvalue. · Pointer Arith Arithmetic on 'void'-pointers and function pointers. · Pointers to Arrays Pointers to arrays with qualifiers work as expected. · Initializers Non-constant initializers. · Compound Literals Compound literals give structures, unions 1 or arrays as values. · Designated Inits Labeling elements of initializers. · Case Ranges 'case 1 ... 9' and such. · Cast to Union Casting to union type from any member of the union. · Mixed Declarations Mixing declarations and code. · Function Attributes Declaring that functions have no side effects, 1 or that they can never return. · Variable Attributes Specifying attributes of variables. · Type Attributes Specifying attributes of types. · Label Attributes Specifying attributes on labels. · Enumerator Attributes Specifying attributes on enumerators. · Statement Attributes Specifying attributes on statements. · Attribute Syntax Formal syntax for attributes. · Function Prototypes Prototype declarations and old-style definitions. · C++ Comments C++ comments are recognized. · Dollar Signs Dollar sign is allowed in identifiers. · Character Escapes '\e' stands for the character <ESC>. · Alignment Inquiring about the alignment of a type or variable. · Inline Defining inline functions (as fast as macros). · Volatiles What constitutes an access to a volatile object. · Using Assembly Language with C Instructions and extensions for interfacing C with assembler. · Alternate Keywords '__const__', '__asm__', etc., for header files. · Incomplete Enums 'enum foo;', with details to follow. · Function Names Printable strings which are the name of the current 1 function. · Return Address Getting the return or frame address of a function. · Vector Extensions Using vector instructions through built-in functions. · Offsetof Special syntax for implementing 'offsetof'. · __sync Builtins Legacy built-in functions for atomic memory access. · __atomic Builtins Atomic built-in functions with memory model. · Integer Overflow Builtins Built-in functions to perform arithmetics and 1 arithmetic overflow checking. · x86 specific memory model extensions for transactional memory x86 memory models. · Object Size Checking Built-in functions for limited buffer overflow 1 checking. · Pointer Bounds Checker builtins Built-in functions for Pointer Bounds Checker. · Other Builtins Other built-in functions. · Target Builtins Built-in functions specific to particular targets. · Target Format Checks Format checks specific to particular targets. · Pragmas Pragmas accepted by GCC. · Unnamed Fields Unnamed struct/union fields within structs/unions. · Thread-Local Per-thread variables. · Binary constants Binary constants using the '0b' prefix. 1