6.9.2 外部对象定义

语义

1、如果对一个对象的标识符的声明具有文件作用域以及一个初始化器,那么该声明是对该标识符的一个外部定义。

2、对于具有文件作用域且没有一个初始化器、没有一个存储类说明符,或者具有存储类说明符static的对象的标识符的一个声明,构成了一个试验性的定义。如果一个翻译单元对于一个标识符包含了一个或多个试验性的定义,并且该翻译单元不包含对此标识符的外部定义,那么该行为就完全好比该翻译单元包含了对此标识符的一个文件作用域的声明,具有到此翻译单元末尾的复合类型,并且具有一个等于0的初始化器。

3、如果对一个对象的一个标识符的声明是一个试验性的定义,并且具有内部连接,那么所声明的类型不应该是一个不完整类型。

4、例1

int i1 = ;    // 定义,外部连接
static int i2 = ; // 定义,内部连接
extern int i3 = ; // 定义,外部连接
int i4; // 试验性定义,外部连接
static int i5; // 试验性定义,内部连接 int i1; // 有效的试验性定义,引用之前的i1
int i2; // 由6.2.2所描述的未定义行为,连接不一致
int i3; // 有效的试验性定义,引用之前的i3
int i4; // 有效的试验性定义,引用之前的i4
int i5; // 由6.2.2所描述的未定义行为,连接不一致 extern int i1; // 引用之前的i1,其连接是外部连接
extern int i2; // 引用之前的i2,其连接是内部连接
extern int i3; // 引用之前的i3,其连接是外部连接
extern int i4; // 引用之前的i4,其连接是外部连接
extern int i5; // 引用之前的i5,其连接是内部连接

5、例2 如果在翻译单元的末尾包含

int i[];

数组i仍然具有不完整类型,那么隐式的初始化器使得它具有一个元素[译者注:相当于定义了int i[1];],它在程序启动时被设置为零。

ISO/IEC 9899:2011 条款6.9.2——外部对象定义的更多相关文章

  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.9——初始化

    6.7.9 初始化 语法 1.initializer: assignment-expression {    initializer-list    } {    initializer-list   ...

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

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

  7. ISO/IEC 9899:2011 条款4——标准顺从

    4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...

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

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

  9. ISO/IEC 9899:2011 条款6.3——转换

    6.3 转换 1.有些操作符将操作数的值自动地从一种类型转换为另一种.本子条款指定了从这么一个隐式转换所要求的结果,以及从一个投射操作(一个显式转换)所要求的结果.在6.3.1.8中所列出的信息概括了 ...

随机推荐

  1. bug集锦------持续但不定期 更新

    对于个人而言:这个错误集锦是很有必要的. 为了避免误导他人,其中个人想法:用 紫色加粗 标注. 1.springboot端口冲突: Protocol handler start failed2.spr ...

  2. 关于struct和typedef struct

    以 struct TelPhone{ ]; ]; }; 为例 这里先定义了一个 TelPhone的结构体. 加入需要为TelPhone定义一个别名: 其语法为 typedef TelPhone TP: ...

  3. CentOS7 离线安装mysql-5.7.16

    CentOS7 离线安装mysql-5.7.16 1 . 安装新版mysql前,需将系统自带的mariadb-lib卸载 [root@slave mytmp]# rpm -qa|grep mariad ...

  4. 使用TFT LCD制作Arduino触摸屏计算器

    Arduino开发板总是可以帮助我们轻松地构建一个项目,并使其看起来更具有吸引力.对一个带有触摸功能的液晶显示屏进行编程听起来可能是一件复杂的工作,但是通过使用Arduino库和扩展模块可以使得这项工 ...

  5. python笔记42-http请求命令行工具(httpie)

    前言 通常我们需要快速的测试某个接口通不通,一般linux上用curl去发http请求,但是这个命令行工具语法有点复杂了,不够直观. python有一个给人类使用的requests库,非常的简单方便. ...

  6. treegrid 折叠全部节点

    $(".easyui-treegrid").treegrid({ url: '@Url.Action("GetDataDictionaryList", &quo ...

  7. Git学习笔记--实践(三)

    文中红色的文字(标为:## 插曲)是在Git学习/实践过程中,我个人遇到的一些问题,每个“## 插曲”之后,都有相应的解决方案. 一.创建版本库 版本库又名仓库,英文名repository,可简单的理 ...

  8. toB创业中的5个行动原则- SaaS创业路线图

    https://www.iyiou.com/p/84471.html 1.硬骨头原则 很多创业者急于求成,这做不好toB创业. 举例来说,产品价值阶段如果发现效果不明显,硬要推进到营销阶段在销售上想办 ...

  9. 利用GitHub+Node.js+Hexo搭建个人博客

    本篇是自己在搭建Hexo博客平台时的一个过程记录.(2019.9.13实测有效) GitHub 账号注册 因为此文所搭建的个人博客是基于GitHub平台服务的,所以首先是注册GitHub,当然已有账号 ...

  10. js form 表单属性学习

    一.<form></form>标签      引用借鉴:http://www.cnblogs.com/fizx/p/6703370.html form标签的属性规定了当前网页上 ...