Next: C++ Extensions, Previous: C++ Implementation, Up: Top   [Contents][Index]


6 Extensions to the C Language Family

GNU C provides several language features not found in ISO standard C. (The -pedantic option directs GCC to print a warning message if any of these features is used.) To test for the availability of these features in conditional compilation, check for a predefined macro __GNUC__, which is always defined under GCC.

These extensions are available in C and Objective-C. Most of them are also available in C++. See Extensions to the C++ Language, for extensions that apply only to C++.

Some features that are in ISO C99 but not C90 or C++ are also, as extensions, accepted by GCC in C90 mode and in C++.

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:    Nested function in GNU C.
Nonlocal Gotos:    Nonlocal gotos.
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 Spaces:    Named 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.
Variadic Pointer Args:    Pointer arguments to variadic functions.
Pointers to Arrays:    Pointers to arrays with qualifiers work as expected.
Initializers:    Non-constant initializers.
Compound Literals:    Compound literals give structures, unions

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,

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:    Determining the alignment of a function, 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

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

arithmetic overflow checking.

x86 specific memory model extensions for transactional memory:    x86 memory models.
Object Size Checking:    Built-in functions for limited buffer overflow

checking.

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.

Next: C++ Extensions, Previous: C++ Implementation, Up: Top   [Contents][Index]