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函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
随机推荐
- Makefile中 的 phony target,empty target
phony target Makefile的语法很简单 <target> : <prerequisites> [tab] <commands> 目标.先决条件.命令 ...
- 手写代码之写斐波那契数列-传入key值求对应的value
public class Testany { public static void main(String[] args) { int value = number(10); System.out.p ...
- jFinal手册
JFinal官方文档 https://www.jfinal.com/ w3cschool之JFinal手册 https://www.w3cschool.cn/jfinal/
- ubuntu安装anaconda3+tensorflow(cpu)+pycharm(windows几乎一样)
网上乱七八糟有的都是别人怎么写自己也怎么写,其实很简单. 首先是anaconda3的安装: 直接上官网:https://www.anaconda.com/download/ 下载下来之后进入文件所在目 ...
- SLAM、三维重建,语义相关数据集大全
作者朱尊杰,公众号:计算机视觉life,编辑成员 一 主要针对自动驾驶: 1.KITTI数据集: http://www.cvlibs.net/datasets/kitti/index.php(RGB+ ...
- PAT_B 20
这道题就是简单的贪心,有几个注意点: 1.又是一个单体有多个属性(即月饼有总量,总价,单价几个属性),这个时候可以考虑使用struct结构,我还是傻傻使用pair,还是没有养成习惯,幸好这道题存下来两 ...
- linux网络编程之posix线程(二)
继续接着上次的posix线程来学习: 回顾一下创建线程的函数: pthread_att_t属性变量是需要进行初始化才能够用的,一定初始化了属性变量,它就包含了线程的多种属性的值,那到底有哪些属性了,下 ...
- Vue中在组件销毁时清除定时器(setInterval)
在mounted中创建并执行定时器,然后在beforeDestroy或者destroyed中清除定时器 <template> <div class="about" ...
- 数据库中聚合索引(MySQL和SQL Server区别)
一.聚集索引和非聚集索引 聚集索引:类似字典的拼音目录.表中的数据按照聚集索引的规则来存储的.就像新华字典.整本字典是按照A-Z的顺序来排列.这也是一个表只能有一个聚集索引的原因.因为这个特点,具体索 ...
- python练习题(三)
题目: 一.二选一 1.每个区生成1个符合身份证规则的身份证号码 2.随机生成10个符合身份证规则的身份证号码 二.要求: 1.身份证属于南京市 2.出生日期为1980-1-1 至 2019-8-1的 ...