ISO/IEC 9899:2011 条款3——术语、定义与符号

时间:2021-05-26 03:08:38

3. 术语、定义与符号

1、对于此国际标准的意图,应用了以下定义。其它术语是在用斜体类型或一个语法规则左侧出现的地方定义。在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用。在本国际标准中没被定义的术语将根据ISO/IEC 2382-1进行解释。在本国际标准中没被定义的数学符号将根据ISO 31-11中进行解释。

3.1 访问

1、<运行时行为>读或修改一个对象的值

2、注1:这里,这两个行为中同时只有一个发生,要么“读”,要么“修改”被使用。

3、注2:“修改”包括要被存储的新的值与先前的值相同的情况。

4、注3:没被计算的表达式不访问对象。

3.2 对齐

1、要求一个特定类型的对象坐落于一个字节地址特定倍数的地址存储边界上

3.3 实参

1、实际argument

实际parameter(已作废)

在一个函数调用表达式中通过小括号包围起来的用逗号分隔的列表中的表达式,或是在一个类似函数的宏调用中用小括号包围的逗号分隔的列表中的一串预处理符记(token)

3.4 行为

1、外部表情或行动

3.4.1 实现自定义的行为

1、本国际标准未指定的行为,而是由每个具体实现来文档说明如何做出选择来处理这些行为

2、例子:一个实现自定义的行为的一个例子是,当一个带符号整数做右移操作时,最高位比特的移位扩展[译者注:即,是作为算术右移还是逻辑右移]。

3.4.2 地区特定行为

1、每个实现所文档说明的依赖于国家当地习俗、文化以及语言的行为

2、例子:一个地区特定行为的例子是,islower函数对于26个小写拉丁字母之外的字符是否返回真。

3.4.3 未定义行为

1、使用了本国际标准并未强加要求的一个不可移植的或有错误的程序构造,或不正确的数据后的行为

2、注:可能的未定义的行为范围从完全忽略不可预测结果的场景,到在翻译或程序执行期间,在该环境中的一个文档化的方式特征下的行为(带有或没有诊断消息发布),到结束一个翻译或执行(带有一个诊断信息发布)。

3、例子:未定义行为的一个例子是整数溢出的行为。

3.4.4 未指定行为

1、使用一个未指定的值,或本国际标准提供两个或更多可能性,以及没有对在任一对象中选择哪个而强加进一步的要求的其它行为

2、例子:一个未指定行为的例子是对一个函数的实参以哪种次序计算。

3.5 比特

1、在执行环境中足够大的数据存储单元,用来存放具有两种值的其中之一的一个对象[译者注:两种值分别为0和1]

2、注:不必要一定能表达一个对象每个单独比特的地址。[译者注:对于一般C语言实现来说,存放一个对象的最小单位尺寸是一个字节,即8个比特。因此,一个地址所能记录的对象的最小单元也就是一个字节。]

3.6 字节

1、足够大的可寻址的数据存储单元以存放执行环境中基本字符集的任一成员

2、注1:唯一地表达一个对象的每个单独字节的地址是有可能的。

3、注2:一个字节是由一个连续的比特串组成,所构成字节的比特位的个数多少是由实现定义的。最低有效位被称为低序比特;最高有效位被称为高序比特

3.7 字符

1、用于组织、控制或表示数据的一组元素的<抽象>成员

3.7.1 字符

1、字符

单字节字符

适应在一个字节中的<C>个比特的表示

3.7.2 多字节字符

1、用一个或多个字节序列所表示的源或执行环境的扩展字符集的一个成员

2、注:扩展字符集是基本字符集的超集。

3.7.3 宽字符

1、用类型wchar_t的对象所表示的值,能够表示当前地域中的任一字符

3.8 强制规定

1、用于解释阐述语言元素在语法上或是在语义上的约束

3.9 正确取整的结果

1、顺从当前取整模式,对所给结果无限范围与精度中的值取最近的结果格式的表示

3.10 诊断信息

1、属于实现消息输出的一个实现自定义的子集的消息

3.11 向前引用

1、引用一条本国际标准稍后介绍的子条款,而该子条款含有对当前子条款相关联的信息

3.12 实现

1、在特定选项下,运行在一个特定翻译环境中的特定软件集,用于执行程序的翻译,并支持在一个特定执行环境中对函数的执行

3.13 实现限制

1、由实现强加到程序上的限制

3.14 存储位置

1、要么是一个标量类型的对象,要么是一个最大顺序的邻近位域,所有位域具有非零宽度

2、注1:执行程序的两个线程可以更新并访问独立的存储位置,不相互干扰。

3、注2:一个位域与一个邻近非位域成员在独立的存储位置空间。这也应用于两个位域,如果其中一个在一个嵌套结构体声明内声明,而另一个不是,或者如果两个被一个零长度的位域声明所分隔,或者它们被一个非位域成员声明所分隔。在一个结构体中更新两个非原子的位域是不安全的,如果所有在它们之间声明的成员也是(非零长度)的位域,而不管那些介入的位域恰好是什么大小。

4、例子:一个结构体声明如下:

struct {
char a;
int b:, c:, :, d:;
struct { int ee:; } e;
};

包含了四个独立的存储器位置:成员a以及位域de.ee,每个都是独立的存储位置,并且可以同时被修改而不会相互干扰。位域bc拼接在一起构成了第四个存储位置。位域bc不能被同时修改不过ba却可以。

3.15 对象

1、在执行环境中的数据存储区域,里面的内容可以用来表达值

2、注:当一个对象被引用时,该对象可以被解释为具有一个特定类型;见6.3.2.1。

3.16 形参

1、正规形参

正规实参(已作废)

作为一个函数声明或定义部分被声明的对象,在函数入口处需要一个值,或由立即跟在像函数一样的宏定义后面的用圆括号包围的逗号分隔的列表中的一个标识符

3.17 推荐的实践

1、规范强烈建议保持顺从标准的意图,但对于某些实现可能是不切实际的。

3.18 运行时强制规定

1、当调用一个库函数调用时对一个程序的要求

2、注1:一个运行时强制规定与3.8所定义的强制规定不同,尽管在术语上类似,并且在翻译时不需要被诊断。

3、注2:支持附录K中扩展的实现要求校验运行时强制规定,对于一个库函数没有被程序违反;见K.3.1.4。

3.19 值

1、当解释为具有一个指定类型时的一个对象内容的精确意思

3.19.1 实现定义的值

1、没个实现文档说明该选择如何做的未指定的值

3.19.2 中间值

1、要么是一个未指定的值,要么是一个陷阱表示

3.19.3 未指定的值

1、本国际标准没有强加规定在任一实例中选择什么值的相关类型的有效值

2、注:一个未指定的值不能是一个陷阱值

3.19.4 陷阱表示

1、不需要表示对象类型的一个值的一个对象表示

3.19.5 执行一个陷阱

1、程序的中断指向,诸如不执行进一步的其它操作

2、注:在本国际标准中,当单词“陷阱”后面没有立即跟“表示”的时候,这是所预订的用法。注:比如,“陷阱或停止(如果支持)被禁止……”(F.8.2)。注意,获取一个陷阱表示可能执行一个陷阱但也不是必要的。(见6.2.6.1)。

3.20 ⎡x⎤

1、x封顶:大于等于x的最小整数

2、例子:⎡2.4⎤是3,⎡-2.4⎤是-2。

3.21 ⎣2.4⎦

1、x的封底:小于等于x的最大整数

2、例子:⎣2.4⎦是2,⎣-2.4⎦是-3。