不应产生或依赖未定义的行为
1.15 ID_undefinedBehavior
未定义的行为(undefined behavior)是指程序在语言标准中没有定义的行为,一般由错误的代码实现引起,可能是崩溃,也可能没有实质危害,这种行为的结果是不可预期的,不应使程序产生或依赖未定义的行为。
对未定义行为的介绍和约束是本规则集合的重要内容,将在后续章节中深入讨论,在附录中也有详细介绍。
示例:
int foo(int i) {
if (i + 1 <= i) // Determine overflow, but it’s undefined
.... // Handle overflow, may be invalid
else
return i + 1;
}
示例代码用 i + 1 <= i 判断是否溢出,但有符号整数溢出的后果是未定义的,这种判断可能是无效的,甚至某些编译器会认为 i + 1 <= i 恒为假而免去 if 分枝,直接返回 i + 1。
应改为:
int foo(int i) {
if (i != INT_MAX) // Well defined
return i + 1;
else
.... // Handle overflow
}
相关
依据
ISO/IEC 9899:2011 3.4.3
ISO/IEC 9899:2011 J.2
ISO/IEC 14882:2011 1.3.24