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++. *Note Extensions to the C++ Language: C++ Extensions, 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. |
Hex Floats | Hexadecimal floating-point constants. |
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. |
Return Address | Getting the return or frame address of a function. |
Other Builtins | Other built-in functions. |
Deprecated Features | Things might disappear from g++. |