案例 A:C11,6.6 常量表达式,语义,5:
如果在翻译环境中计算浮动表达式,则算术范围和精度应至少与在执行环境中计算表达式一样大。116)
这需要以下程序返回 0:
#include <float.h>
#define EXPR DBL_MIN * DBL_MAX
double d1 = EXPR;
double d2;
#pragma STDC FENV_ACCESS ON
int main(void)
{
d2 = EXPR;
return d1 == d2 ? 0 : 1;
}
案例 B:C11,6.10.1 条件包含,语义,4:
这些字符常量的数值是否与表达式中出现相同字符常量时获得的值相匹配(除了在#if 或#elif 指令中)是实现定义的。168)
它不需要以下程序返回 0:
#define EXPR 'z' - 'a' == 25
int main(void)
{
_Bool b1 = 0;
_Bool b2;
#if EXPR
b1 = 1;
#endif
b2 = EXPR;
return b1 == b2 ? 0 : 1;
}
问题:制作“案例 B”实现定义的行为的基本原理是什么?