Go forward to C++ Extensions.
Go backward to Installation.
Go up to Top.
Extensions to the C Language Family
***********************************
GNU C provides several language features not found in ANSI standard
C. (The `-pedantic' option directs GNU CC 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 GNU CC.
These extensions are available in C and Objective C. Most of them
are also available in C++. See Extensions to the C++ Language: C++ Extensions, for extensions that apply *only* to C++.
Menu
- Statement Exprs
- Putting statements and declarations inside expressions.
- Local Labels
- Labels local to a statement-expression.
- 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.
- Naming Types
- Giving a name to the type of some expression.
- Typeof
- `typeof': referring to the type of an expression.
- Lvalues
- Using `?:', `,' and casts in lvalues.
- Conditionals
- Omitting the middle operand of a `?:' expression.
- Long Long
- Double-word integers--`long long int'.
- Complex
- Data types for complex numbers.
- Zero Length
- Zero-length arrays.
- Variable Length
- Arrays whose length is computed at run time.
- Macro Varargs
- Macros with variable number of arguments.
- Subscripting
- Any array can be subscripted, even if not an lvalue.
- Pointer Arith
- Arithmetic on `void'-pointers and function pointers.
- Initializers
- Non-constant initializers.
- Constructors
- Constructor expressions give structures, unions
or arrays as values.
- Labeled Elements
- Labeling elements of initializers.
- Cast to Union
- Casting to union type from any member of the union.
- Case Ranges
- `case 1 ... 9' and such.
- Function Attributes
- Declaring that functions have no side effects,
or that they can never return.
- 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>.
- Variable Attributes
- Specifying attributes of variables.
- Type Attributes
- Specifying attributes of types.
- Alignment
- Inquiring about the alignment of a type or variable.
- Inline
- Defining inline functions (as fast as macros).
- Extended Asm
- Assembler instructions with C expressions as operands.
(With them you can define "built-in" functions.)
- Asm Labels
- Specifying the assembler name to use for a C symbol.
- Explicit Reg Vars
- Defining variables residing in specified registers.
- 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.