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 静态断言

ISO/IEC 9899:2011 条款6.7——声明的更多相关文章

  1. ISO/IEC 9899:2011 条款3——术语、定义与符号

    3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...

  2. ISO/IEC 9899:2011 条款5——5.2.1 字符集

    5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...

  3. ISO/IEC 9899:2011 条款6.4.2——标识符

    6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier    identifier-nondigit identifie ...

  4. ISO/IEC 9899:2011 条款6.4.3——通用字符名

    6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...

  5. ISO/IEC 9899:2011 条款6.7.6——声明符

    6.7.6 声明符 语法 1.declarator: pointeropt    direct-declarator direct-declarator: identifier (    declar ...

  6. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

  7. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

  8. ISO/IEC 9899:2011 条款6.5——表达式

    6.5 表达式 1.一个表达式是操作符与操作数的一个序列,这些操作符与操作数指定了一个值的计算,或指派一个对象或一个函数,或是生成副作用,或执行上述操作的组合.对一个操作符的操作数的值计算顺序排在对该 ...

  9. ISO/IEC 9899:2011 条款6.8.6——跳转语句

    6.8.6 跳转语句 语法 1.jump-statement: goto    identifier    ; continue    ; break    ; return    expressio ...

随机推荐

  1. 启动Vue项目,提示:Cannot find module 'webpack/bin/config-yargs'

    "webpack-dev-server": "^2.11.5"

  2. spring boot学习笔记(二)创建spring boot项目

    用eclipse(需要用高版本,要不然弄不出来):new →Spring Sarter Project 用IDEA:一般默认 一般默认 入门级的先 剩下的一般默认... 一.项目至少有下面的东西,里面 ...

  3. 创建型模式(二) 工厂方法模式(Factory Method)

    一.动机(Motivation) 在软件系统创建过程中,经常面临着"某个对象"的创建工作:由于需求的变化,这个对象(的具体实现)经常面临着剧烈的变化,但是它却拥有比较稳定的接口.如 ...

  4. Linux PAM 之cracklib模块

       如何在Linux系统中限制密码长度的同时对密码的复杂程度也进行管理,最近发现有人的密码符合长度规则,但是却很简单很容易被猜出来,查了相关资料后发现了PAM中的pam_cracklib模块就是用来 ...

  5. Hbase表结构

    1.Hbase表结构:可以看成map,里面有行键,行键是按照字母顺序排序.行键下面是列族,每个列族可以有不同数量的列甚至是没有列.每个列里面包含着不同时间版本的列的值. 行键:是按照字母的顺序排序的, ...

  6. 洛谷 P1854 花店橱窗布置 题解

    Analysis 给定一个f*v的矩阵 要求从第一行走到第f行,每行取走一个数, 且该行所取的数必须必上一行所取的数的列数大 , 求所能取走的最大值 注意每一行所取走的数字的列数必须大于等该行的行号 ...

  7. mongodb 集群配置文件

    本文档是在mongodb为3.4下编写的,仅作为参考,详细内容请参考:https://docs.mongodb.com/manual/reference/configuration-options/# ...

  8. 【洛谷P4245】 【模板】任意模数NTT

    三模数 NTT,感觉不是很难写 $?$ 代码借鉴的 https://www.cnblogs.com/Mychael/p/9297652.html code: #include <bits/std ...

  9. mybatis-helper

    mybatis-helper 在mapper层可以跳转到sql xml中 只需要在idea plugin中搜索即可.

  10. Ubuntu 下面手动安装 Redis

    1.下载 wget http://download.redis.io/releases/redis-2.8.17.tar.gz .tar.gz cd redis- make 2.复制文件到bin目录 ...