ISO/IEC 9899:2011 条款6.2.7——兼容类型与组合类型
6.2.7 兼容类型与组合类型
1、两个类型具有兼容类型,如果它们的类型是相同的。用于判定两个类型是否兼容的其它规则在6.7.2关于类型说明符中,6.7.3关于类型说明符中,6.7.6关于声明符中描述。[注:两个类型不需要完全相同而为兼容。]此外,声明在独立翻译单元中的两个结构体、联合体、枚举类型是兼容的,如果它们的标签以及成员满足以下要求:如果这两个类型在它们相应翻译单元中都是完整的,那么要应用以下额外的要求:在它们的成员之间应该要有一个一一对应关系,以至于相应成员的每一对以相兼容的类型来声明;如果成员对的其中一个成员用一个对齐说明符来声明,那么另一个要用等价的对齐说明符来声明;并且如果声明对的其中一个成员用一个名字声明,那么另一个要用相同的名字来声明。对于两个结构体,相应的成员应该以相同的次序来声明。对于两个结构体或联合体,相应的位域应该具有相同的宽度。对于两个枚举,相应的成员应该具有相同的值。
2、引用同一个对象或函数的所有声明应该具有相兼容的类型;否则,行为是未定义的。
3、一个组合类型可以从两个相互兼容的类型来构建;组合类型是与两个类型都兼容并且满足以下条件的类型:
——如果两个类型都是数组类型,那么要应用以下规则:
• 如果一个类型是一个已知常量大小的数组,那么组合类型是那个大小的一个数组。
• 否则,如果一个类型是一个变长数组,其大小通过一个尚未被计算的表达式指定,那么行为是未定义的。
• 否则,如果一个类型是一个变长数组,其大小已被指定,那么组合类型是那个大小的一个变长数组。
• 否则,如果一个类型是一个变长数组,其大小未指定,那么组合类型是一个未指定大小的变长数组。
• 否则,两个类型都是未知大小的两个数组,并且组合类型是一个未知大小的数组。
组合类型的元素类型是两个元素的组合类型。
如果仅有一个类型是带有一个形参类型列表的函数类型(一个函数原型),那么该组合类型是带有形参类型列表的函数原型。
——如果两个类型都是带有形参类型列表的函数类型,那么在组合形参类型中的每个形参的类型是相应形参的组合类型。
这些规则递归地运用于从两个类型派生出来的类型。
4、对于声明在一个作用域中的带有内部或外部连接的一个标识符,在此作用域中该标识符的声明是可见的[注:见6.2.1中所指定的,后续的声明可能隐藏先前的声明],如果先前的声明指定了内部或外部连接,那么在后续声明上的该标识符的类型变为组合类型。
5、例子:给定以下两个文件作用域的声明:
int f(int (*)(), double (*)[]);
int f(int (*)(char*), double (*)[]);
该函数的结果组合类型为:
int f(int (*)(char*), double (*)[]);
ISO/IEC 9899:2011 条款6.2.7——兼容类型与组合类型的更多相关文章
- 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.8.6——跳转语句
6.8.6 跳转语句 语法 1.jump-statement: goto identifier ; continue ; break ; return expressio ...
- ISO/IEC 9899:2011 条款6.7.9——初始化
6.7.9 初始化 语法 1.initializer: assignment-expression { initializer-list } { initializer-list ...
- ISO/IEC 9899:2011 条款6.7.3——类型限定符
6.7.3 类型限定符 语法 1.type-qualifier: const restrict volatile _Atomic 约束 2.除了指针类型(其被引用的类型是一个对象类型)之外的类型,不应 ...
- ISO/IEC 9899:2011 条款6.3.1——算术操作数
6.3.1 算术操作数 6.3.1.1 布尔.字符以及整数 1.每个整数类型具有一个整数转换等级,如下定义: ——两个带符号的整数类型都不应该具有相同等级,即使它们具有相同的表示. ——一个带符号整数 ...
- ISO/IEC 9899:2011 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
随机推荐
- PS批量制作获奖证书并导出PNG
其实方法和"使用PS批量制作视频字幕"的方法类似.区别在于制作视频字幕时导出成psd格式就可以直接导入Premiere中使用了,而获奖证书考虑到打印设备有无PS的不确定性,可能需要 ...
- MySQL进阶10--DML数据操纵预言: insert/delete/update --多表连接修改/.多表连接删除/多表连接查询-- truncate 和 delete的区别
/* DML -- 数据操纵预言: insert/delete/update */ #一: 插入语句 /* 语法1: insert into 表名(列名,..,列名....) values(值1,值2 ...
- Electron Apps Are Bad, So Now You Can Create Desktop Apps With HTML5 + Golang
原文:https://www.phoronix.com/scan.php?page=news_item&px=HTML5-Golang-Desktop-Apps --------------- ...
- 在vue中使用css预编辑器
vue中使用less 安装less依赖,npm install less less-loader --save vue中使用sass npm install --save-dev sass-loade ...
- python开发的百度翻译接口
做的一个python版的百度翻译,附代码 #!/usr/bin/env python # -*- coding:utf-8 -*- ''' 爬虫之百度翻译 需要的库有 js2py, request ...
- Nginx入门(三)——正向代理
server { resolver 114.114.114.114; #指定DNS服务器IP地址 listen 443; location / { proxy_pass https://$host$r ...
- Python 高级
GIL面试题如下 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. Guido的声明:ht ...
- splay树 1285 宠物收养所
#include<cstdio> #include<iostream> using namespace std; int shu[80004][2],n,size,root,k ...
- P2736 “破锣摇滚”乐队 Raucous Rockers
题目描述 你刚刚继承了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权.你打算从中精选一些歌曲,发行M(1 <= M <= 20)张CD.每一张C ...
- Mac 解决终端:-bash: /Users/xxx/.profile: No such file or directory
touch ~/.profile加入export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 参考:https://www.zhihu.com/ ...