Mozilla C/C++编码风格
Mozilla C/C++ coding style
今天我在浏览"Mozilla编码风格指南"时发现了一点我不确定。
下面的陈述是什么意思?
不要比较
x == true
或x == false
。请改用(x)
或(!x)
。事实上,x == true
与if (x)
不同!
我不确定这两种方法有何不同。请澄清。
x == true
和/或x == false
的评估取决于true
和false
的定义,这两个定义可能不完全相同。
CCD_ 11和CCD_ 12仅基于CCD_。例如,在x
具有非零值的情况下,将对(x)
进行评估以产生TRUE结果。
在C
中,根据C11
标准、stdbool.h
标题、7.18
章节,true
和false
的定义是
真
其扩展到整数常数1,
错误
它扩展到整数常数0
因此,在x
具有值2
的情况下
x == true
将被评估为产生FALSE(x)
将产生真
因此,为了生成健壮的代码并保持可移植性,最好使用后面的方法。
C和C++是不同的语言。
在C99或C11中,所有东西都可以用作测试,使用约定:
- 作为
false
的bool
(来自<stdbool.h>
)值被测试为假,否则它应该是true
并被测试为真 - 整数类型(例如
int
、long
、来自<stdint.h>
的intptr_t
等)只有在为0时才被测试为假 - 浮点类型(例如
double
)如果为0.0,则测试为false,如果为非零值,则测试结果为true。对于NAN
,这是一个特定问题。请参阅浮点指南 - 如果指针类型为
NULL
,则测试为false,否则测试为true。我忘记了标准中关于无效指针的规定(不是&
运算符或malloc
等的一元地址的结果…)
在C++11中,可以使用operator bool
显式转换为bool
,使用operator !
显式转换一元!
运算符,所以事情要复杂得多。我相信(但我不确定)x == true
会在x
上使用到bool
运算符的转换,至少如果该运算符是显式的。
我确信有一些微妙的角落情况(在C中,指向某个现有函数的指针是真的,但我忘记了标准对指向函数的指针的一般规定…)。在C++中,这是一场噩梦。
在C++中,false是0
,其他都是true,但当您比较x == true
时,您实际上是在测试天气x == 1
,这在某些情况下是可以的,但不是全部。
相关文章:
- Qt VTK交互风格的信号到小部件
- 特征:编码风格对性能的影响
- Mozilla C/C++编码风格
- 有没有像Pycharm那样的c++IDE检查编码风格
- C++ / Qt编码风格 - #define 应该去哪里
- 事实上的标准 C++11 编码风格
- 谷歌C++编码风格,没有例外规则.多线程呢?
- 分配和比较编码风格
- c++编码风格
- Java和C++的编码风格之间有什么具体的区别
- 迭代器的最佳编码风格
- Boost::asio这种奇怪的编码风格是什么
- 统一编码风格的Javascript, PHP, C和c++
- 哪些是具有优秀编码风格的开源c++项目?
- 如何确保CMakeLists.txt和FindXXX.cmake的编码风格一致?
- 只允许c++ 11的编码特性和风格
- 编码风格-C++语法问题
- 在 C/C++ 中使用堆栈进行内存管理时的编码风格
- 完全自定义Qt创建器编码风格
- 在Visual Studio和VIM中执行编码风格