ISO/IEC 9899:2011 条款6.9.2——外部对象定义
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——外部对象定义的更多相关文章
- ISO/IEC 9899:2011 条款3——术语、定义与符号
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...
- ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...
- ISO/IEC 9899:2011 条款6.4.2——标识符
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier identifier-nondigit identifie ...
- ISO/IEC 9899:2011 条款6.4.3——通用字符名
6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...
- ISO/IEC 9899:2011 条款6.7.9——初始化
6.7.9 初始化 语法 1.initializer: assignment-expression { initializer-list } { initializer-list ...
- ISO/IEC 9899:2011 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
- ISO/IEC 9899:2011 条款4——标准顺从
4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...
- ISO/IEC 9899:2011 条款6——语言
6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...
- ISO/IEC 9899:2011 条款6.3——转换
6.3 转换 1.有些操作符将操作数的值自动地从一种类型转换为另一种.本子条款指定了从这么一个隐式转换所要求的结果,以及从一个投射操作(一个显式转换)所要求的结果.在6.3.1.8中所列出的信息概括了 ...
随机推荐
- mysql表的创建、查看、修改、删除
一.创建表 创建表前先使用use 数据库名进入某一个数据库,创建表语句的格式如下: create table 表名称 ( 列名1 列的数据类型 [约束], 列名2 列的数据类型 [约束], 列名2 列 ...
- 浅谈HTTP中Get与Post的区别【转】
转自http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html#commentform 感谢LZ分享 Http定义了与服务器交互的不同方法 ...
- 【HCIA Gauss】学习汇总-数据库管理(事务 权限 审计 OBDC JDBC)-6
事务控制事务提交 commit事务回滚 rollback savepoint 用于事务设置保存点 ----> savepoint s1 / savepoint s2 rollback to sa ...
- 动态规划——背包问题python实现(01背包、完全背包、多重背包)
目录 01背包问题 完全背包问题 多重背包问题 参考: 背包九讲--哔哩哔哩 背包九讲 01背包问题 01背包问题 描述: 有N件物品和一个容量为V的背包. 第i件物品的体积是vi,价值是wi. 求解 ...
- Linux TTY函数跟踪
1. 介绍 本文介绍了TTY打开.TTY读和TTY写操作的函数跟踪过程 2. 示例 下面是一个简单的Linux TTY打开和读写过程 #include <termios.h> #inclu ...
- YII2 更新数据不成功
起因: CLI模式,定时任务.同步其他系统中的DB数据,通过视图的方式. 历程: 原脚本已经写好,实在已经有的基础上修改,增加新的字段. 加了字段后,执行,但始终不成功,表里记录的utime也是能更新 ...
- spark中的scalaAPI之RDDAPI常用操作
package com.XXX import org.apache.spark.storage.StorageLevel import org.apache.spark.{SparkConf, Spa ...
- Dubbo源码分析:ChannelHandler
背景 一个请求经过序列化二进制数据转化成对象之后.请求进入netty框架,netty框架经过业务处理把主动权转交给NettyHandler对象.NettyHandler进入ChannelHandler ...
- 委托、Lamda表达式
1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树
- 决策树——C4.5
-- coding: utf-8 -- """ Created on Thu Aug 2 17:09:34 2018 决策树ID3,C4.5的实现 @author: we ...