据我所见,在C语言中使用布尔值有三种方法:
1. 使用bool类型,从导入,然后使用true和false。 2. 使用预处理器定义,例如
还有其他我可能忽略的方法吗?不同方法之间的优缺点是什么?
我认为最快的方法应该是第三种,第二种更易读(尽管位取反会稍微增加开销),而第一种最易读但不兼容所有编译器。
1. 使用bool类型,从导入,然后使用true和false。 2. 使用预处理器定义,例如
#define FALSE 0 ... #define TRUE !(FALSE)
。
3. 直接使用常量,即1和0。还有其他我可能忽略的方法吗?不同方法之间的优缺点是什么?
我认为最快的方法应该是第三种,第二种更易读(尽管位取反会稍微增加开销),而第一种最易读但不兼容所有编译器。
int i = 12 + 3 * 4;
;它会直接写成int i = 24;
。担心性能问题是一个常见的问题,不要感到难过。优化是最后才考虑的事情,当你需要进行优化时,你必须计时并查看汇编输出,而不是猜测。即使它耗费了一个周期,我也会选择最易读的解决方案。只有在证明它是一个瓶颈时,我才会寻求更好的性能。 - GManNickG(x == TRUE)
和(x)
不是相同的。前者只有当x
的值为TRUE
时才为真,而后者对于任何非零值都为真。 - Devon_C_Millerif(foo == TRUE)
或if(foo == FALSE)
这样的代码,这在大多数语言中都是可怕的,但在 C 语言中更加如此,因为在布尔环境下任何标量值!= 0
都被认为是 true;出于类似但较轻微的原因,我不喜欢用if(foo != NULL)
和if(foo == NULL)
来判定指针是否为空;虽然这不会像与TRUE
的比较一样引入错误,但仅仅是口味问题而已。然而,对于任何标量值,使用if(foo)
和if(!foo)
更符合 C 语言的外观和感觉。 - Christoph