【发布时间】:2020-08-14 22:56:49
【问题描述】:
在我正在编写的一段代码中,如果某些_Bool 为真,我需要在unsigned long 上加1。
我一直在用
unsigned long l;
_Bool b;
... //stuff happens to both variables
if(b)
++l;
但我在 C 标准中读到 _Bool 类型被归类为“标准无符号整数类型”之一,并且保证将 true 表示为 1,false 表示为 0。
我用这个看似等效的表达式替换了我的代码
unsigned long l;
_Bool b;
... //stuff happens to both variables
l+=b;
我的编译器没有抱怨,它似乎运行良好。
这是保证工作,还是我只是在我的编译器中利用 _Bool 的实现?
【问题讨论】:
-
保证工作
-
你不能保证总是有 "_Bool" ...但如果你这样做了,你的代码就可以工作。如果你不这样做,它甚至不会编译:) 问:你为什么用“真/假”做整数运算?这难道不是首先破坏了拥有“_Bool”的目的吗????
-
@paulsm4 C99 及更高版本绝对保证
_Bool的存在。没有它的唯一方法是如果您有一个不符合标准的编译器或符合 C90 的编译器。如今,这样的编译器很少见。可能有一些适用于小型嵌入式系统。