C 和 C 语言中布尔到整数转换的可移植性如何?
Dec 05, 2024 am 01:09 AMbool 到 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)。根据这些标准:
- False 转换为 0。
- True 转换为 1。
在我们的示例中:
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中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林
两个点博物馆:所有展览以及在哪里可以找到它们
3 周前
By 尊渡假赌尊渡假赌尊渡假赌

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林
两个点博物馆:所有展览以及在哪里可以找到它们
3 周前
By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)