bool 到 int 转换:深入探讨其可移植性
原始问题:
bool 值转换为 int 的可移植性如何?我们能否确定以下断言在所有系统上都通过?
int x = 4 < 5; assert(x == 1); x = 4 > 5; assert(x == 0);
答案:
是的,bool 到 int 的转换是完全可移植的并且符合都是C和C
解释:
在 C 中,从 bool 到 int 的转换是隐式的,如 C 标准中所指定的(C 11 或 C 标准中的第 4.7/4 节或14 标准、C 17 标准的§7.8/4、20 标准的§7.3.9/2)。根据这些标准:
在我们的示例中:
int x = 4 < 5;
准确翻译为:
int x = true;
因为 true 已转换对于一,断言就会通过。同样,在第二个断言中, false 被转换为零,从而断言成功。
C 的附加信息:
在 C99 之前,C 没有布尔类型。但是,C99 引入了 _Bool 类型和扩展为 _Bool 的宏 bool(在 stdbool.h 头文件中定义)。宏 true 和 false 也在同一个头文件中定义,其中 true 扩展为整数常量 1,false 扩展为整数常量 0。
根据 C99 的 §7.16:
#define bool _Bool #define true 1 #define false 0
因此,C99 及更高版本中的 bool 到 int 转换的行为与 C 类似。
以上是C 和 C 语言中布尔到整数转换的可移植性如何?的详细内容。更多信息请关注PHP中文网其他相关文章!