C99扩展特性

来源:互联网 发布:淘宝游戏物品交易平台 编辑:程序博客网 时间:2024/05/22 11:43

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


5.1 Statements and Declarations in Expressions     Putting statements and declarations inside expressions.
5.2 Locally Declared Labels        Labels local to a statement-expression.
5.3 Labels as Values        Getting pointers to labels, and computed gotos.
5.4 Nested Functions        As in Algol and Pascal, lexical scoping of functions.
5.5 Constructing Function Calls       Dispatching a call to another function.
5.6 Naming an Expression's Type       Giving a name to the type of some expression.
5.7 Referring to a Type with typeof       typeof: referring to the type of an expression.
5.8 Generalized Lvalues        Using `?:', `,' and casts in lvalues.
5.9 Conditionals with Omitted Operands      Omitting the middle operand of a `?:' expression.
5.10 Double-Word Integers        Double-word integers---long long int.
5.11 Complex Numbers        Data types for complex numbers.
5.12 Hex Floats         Hexadecimal floating-point constants.
5.13 Arrays of Length Zero        Zero-length arrays.
5.14 Arrays of Variable Length       Arrays whose length is computed at run time.
5.15 Macros with a Variable Number of Arguments.     Macros with a variable number of arguments.
5.16 Slightly Looser Rules for Escaped Newlines     Slightly looser rules for escaped newlines.
5.17 String Literals with Embedded Newlines      String literals with embedded newlines.
5.18 Non-Lvalue Arrays May Have Subscripts      Any array can be subscripted, even if not an lvalue.
5.19 Arithmetic on void- and Function-Pointers     Arithmetic on void-pointers and function pointers.
5.20 Non-Constant Initializers       Non-constant initializers.
5.21 Compound Literals        Compound literals give structures, unions or arrays as         values.
5.22 Designated Initializers       Labeling elements of initializers.
5.24 Cast to a Union Type        Casting to union type from any member of the union.
5.23 Case Ranges         `case 1 ... 9' and such.
5.25 Mixed Declarations and Code       Mixing declarations and code.
5.26 Declaring Attributes of Functions      Declaring that functions have no side effects, or that they         can never return.
5.27 Attribute Syntax        Formal syntax for attributes.
5.28 Prototypes and Old-Style Function Definitions     Prototype declarations and old-style definitions.
5.29 C++ Style Comments        C++ comments are recognized.
5.30 Dollar Signs in Identifier Names      Dollar sign is allowed in identifiers.
5.31 The Character ESC in Constants       `/e' stands for the character ESC.
5.33 Specifying Attributes of Variables      Specifying attributes of variables.
5.34 Specifying Attributes of Types       Specifying attributes of types.
5.32 Inquiring on Alignment of Types or Variables     Inquiring about the alignment of a type or variable.
5.35 An Inline Function is As Fast As a Macro     Defining inline functions (as fast as macros).
5.36 Assembler Instructions with C Expression Operands  Assembler instructions with C expressions as operands.
                             (With them you can define "built-in" functions.)
5.37 Controlling Names Used in Assembler Code     Specifying the assembler name to use for a C symbol.
5.38 Variables in Specified Registers      Defining variables residing in specified registers.
5.39 Alternate Keywords        __const__, __asm__, etc., for header files.
5.40 Incomplete enum Types        enum foo;, with details to follow.
5.41 Function Names as Strings       Printable strings which are the name of the current         function.
5.42 Getting the Return or Frame Address of a Function  Getting the return or frame address of a function.
5.43 Other built-in functions provided by GCC     Other built-in functions.