ISO/IEC 9899:2011 条款6.7——声明

6.7 声明

语法

1、declaration:

        declaration-specifiers    init-declarator-listopt    ;

        static_assert-declaration

    declaration-specifiers:

        storage-class-specifier    declaration-specifiersopt

        type-specifier    declaration-specifiersopt

        type-qualifier    declaration-specifiersopt

        function-specifier    declaration-specifiersopt

        alignment-specifier    declaration-specifiersopt

    init-declarator-list:

        init-declarator

        init-declarator-list    ,    init-declarator

    init-declarator:

        declarator

        declarator    =    initializer


约束

2、不是一个static_assert的一个声明应该至少声明一个声明符(而不是一个函数的形参或一个结构体或联合体的成员),一个标签[译者注:即一个结构体、联合体与枚举的标签,也就是关键字struct、union和enum],或一个枚举的成员。

3、如果一个标识符不具有连接,那么应该在同一名字空间中最多只能有一个具有同一作用域的该标识符的声明(在一个声明符或类型说明符中),除了:

——一个typedef名可以被重定义来表示与它当前所定义的相同的类型,提供那个类型并不是一个可修改的类型;

——结构体、联合体、枚举标签可以被重新声明,在6.7.2.3中指明。

4、在引用同一对象或函数的同一作用域中的所有声明应该指定相兼容的类型。

语义

5、一个声明指定了一组标识符的解释与与属性。一个标识符的定义是为那个标识符的声明,使得:

——对于一个对象,为那个对象留出存储空间;

——对于一个函数,包含了函数体;[注:函数定义具有一个不同的语法,见6.9.1中的描述。]

——对于一个枚举常量,是该标识符的(仅有的)声明;

——对于一个typedef名,是该标识符的第一个(或仅有的)声明。

6、声明说明符由一列说明符组成,指明了连接、存储周期、以及声明符所注明的实体的类型的一部分。init-declarator-list是一个用逗号分隔的声明符的序列,其中每一个可以具有额外的类型信息,或是一个初始化器,或者两者俱备。这些声明符包含了正在声明的标识符(如果含有的话)。

7、如果为一个对象的标识符不具有连接,那么对此对象的类型应该用其声明符的末尾来作为是完整的,或者通过其init-declarator的末尾来作为完整性,如果它具有一个初始化器的话;在函数形参的情况下(包括函数原型),它是被调整后的所需完整的类型(见6.7.6.3)。


6.7.1 存储类说明符

6.7.2 类型说明符

6.7.3 类型限定符

6.7.4 函数说明符

6.7.5 对齐说明符

6.7.6 声明符

6.7.7 类型名

6.7.8 类型定义

6.7.9 初始化

6.7.10 静态断言

 

posted @ 2015-10-11 02:06  zenny_chen  Views(493)  Comments(0Edit  收藏  举报