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, for extensions that apply only to C++.
| 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. |
| 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. |