3.1 总则与行为相关术语
TIP
这一页集中处理“行为”相关术语。后面阅读标准正文时,实现定义行为、未指定行为、未定义行为 这几个词会反复出现,建议先分清它们的边界。
3. 术语、定义和符号
就本文档而言,适用 ISO/IEC 2382、ISO 80000-2 中给出的术语和定义,以及下列术语和定义。
ISO 和 IEC 在以下地址维护供标准化工作使用的术语数据库:
- ISO 在线浏览平台:https://www.iso.org/obp
- IEC Electropedia:https://www.electropedia.org/
其他术语在其以斜体出现之处,或在语法规则左侧定义。本文档中显式定义的术语,不应被推定为隐含地指代其他地方定义的相似术语。
3.1 访问(动词)
access(动词)在执行期间,对对象的值进行读取或修改。
注 1:如果只表示这两种动作之一,则使用“读取”或“修改”。
注 2:“修改”包括这样一种情况:所存储的新值与先前的值相同。
注 3:未被求值的表达式不会访问对象。
3.2 对齐
alignment对特定类型对象提出的要求:它必须位于某个存储边界上,而该边界的地址是字节(3.7)地址的特定倍数。
3.3 实参
argument又称
actual argument;actual parameter这一说法已弃用。指函数调用表达式中圆括号内、以逗号分隔的各个表达式,或者类函数宏调用中圆括号内、以逗号分隔的各个预处理记号序列。
3.4 算术取负
arithmetically negate产生给定数的相反数。
注 1:对于浮点数(5.2.5.3.3),这会改变其符号;对于整数,这等价于从零中减去该数。
3.5 行为
behavior外部可观察到的表现或动作。
3.5.1 实现定义行为
implementation-defined behavior一类未指定行为,但要求每个实现把自己的选择方式写入文档。
注 1:附录 J.3 对导致 C 程序出现实现定义行为的性质作了概述。
示例:实现定义行为的一个例子是,对有符号整数执行右移时,高位比特如何传播。
3.5.2 区域设置特定行为
locale-specific behavior一类依赖民族、文化和语言等本地约定的行为,并且每个实现都要把这些约定写入文档。
注 1:附录 J.4 对导致 C 程序出现区域设置特定行为的性质作了概述。
示例:区域设置特定行为的一个例子是,
islower函数对于 26 个拉丁小写字母之外的字符是否返回真。
3.5.3 未定义行为
undefined behavior由于使用了不可移植的或有错误的程序构造,或使用了错误的数据,而本文档对此不施加任何要求时产生的行为。
WARNING
“未定义行为”不是“行为还没说明清楚”,而是标准明确不对结果作要求。实现可以给出任何结果,也可以在不同场景下表现不同。
注 1:可能的未定义行为,范围可以从完全忽略该情形并产生不可预测的结果,到在翻译期间或程序执行期间以环境特有且已文档化的方式表现出来(无论是否发出诊断消息),再到终止翻译或终止执行(并发出诊断消息)。
注 2:附录 J.2 对导致 C 程序出现未定义行为的性质作了概述。
注 3:程序执行期间的任何其他行为,只会因遇到该错误或不可移植的程序构造或数据时所发生的具体行为而受到直接影响。特别地,当程序执行中某个具有未定义行为的操作发生之前,所有可观察行为(5.1.2.4)都表现得如本文档所规定的那样。
示例:对空指针解引用时的行为,就是未定义行为的一个例子。
3.5.4 未指定行为
unspecified behavior由未指定值的使用所导致的行为,或者标准给出了两个或更多允许的结果、但不要求某次必须选哪一个时产生的行为。
注 1:附录 J.1 对导致 C 程序出现未指定行为的性质作了概述。
示例:函数实参按什么顺序求值,就是未指定行为的一个例子。