ISO/IEC 9899:2011 条款6.9.2——外部对象定义
2016-01-16 03:08
183 查看
6.9.2 外部对象定义
语义
1、如果对一个对象的标识符的声明具有文件作用域以及一个初始化器,那么该声明是对该标识符的一个外部定义。
2、对于具有文件作用域且没有一个初始化器、没有一个存储类说明符,或者具有存储类说明符static的对象的标识符的一个声明,构成了一个试验性的定义。如果一个翻译单元对于一个标识符包含了一个或多个试验性的定义,并且该翻译单元不包含对此标识符的外部定义,那么该行为就完全好比该翻译单元包含了对此标识符的一个文件作用域的声明,具有到此翻译单元末尾的复合类型,并且具有一个等于0的初始化器。
3、如果对一个对象的一个标识符的声明是一个试验性的定义,并且具有内部连接,那么所声明的类型不应该是一个不完整类型。
4、例1
5、例2 如果在翻译单元的末尾包含
数组i仍然具有不完整类型,那么隐式的初始化器使得它具有一个元素[译者注:相当于定义了int i[1];],它在程序启动时被设置为零。
语义
1、如果对一个对象的标识符的声明具有文件作用域以及一个初始化器,那么该声明是对该标识符的一个外部定义。
2、对于具有文件作用域且没有一个初始化器、没有一个存储类说明符,或者具有存储类说明符static的对象的标识符的一个声明,构成了一个试验性的定义。如果一个翻译单元对于一个标识符包含了一个或多个试验性的定义,并且该翻译单元不包含对此标识符的外部定义,那么该行为就完全好比该翻译单元包含了对此标识符的一个文件作用域的声明,具有到此翻译单元末尾的复合类型,并且具有一个等于0的初始化器。
3、如果对一个对象的一个标识符的声明是一个试验性的定义,并且具有内部连接,那么所声明的类型不应该是一个不完整类型。
4、例1
int i1 = 1; // 定义,外部连接 static int i2 = 2; // 定义,内部连接 extern int i3 = 3; // 定义,外部连接 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];],它在程序启动时被设置为零。
相关文章推荐
- mysql悲观锁总结和实践
- mysql乐观锁总结和实践
- 快速掌握Lua 5.3 —— "Iterators"和"Generic for"
- Linux系统下利用wget命令把整站下载做镜像网站
- 【Leetcode】Valid Number
- [python] List Comprehension
- 典型代码-结构与类-2
- Java多线程学习笔记(三)同步和异步
- 面向对象1
- 关于Android Studio乱码的解决办法
- Android 数据存储之 文件存储
- python 学习第十一课 上下文管理 paramiko 堡垒机 mysql操作
- 典型代码-结构与类-1
- python学习笔记-Day11-- MySQLdb
- hdu5514Frogs
- 隐式游标的属性值变化
- MySQL数据库事务隔离级别(Transaction Isolation Level)
- USBWebServer 中文便携版 快速搭建 PHP/MySQL 网站服务器环境
- COM开发入门
- 彻底消除wine中文乱码