Rom*_*n M 18 c c++ syntax comparison
我在一些代码中注意到了一段时间的以下语法:
if( NULL == var){
//...
}
Run Code Online (Sandbox Code Playgroud)
要么
if( 0 == var){
//...
}
Run Code Online (Sandbox Code Playgroud)
和类似的事情.
有人可以解释为什么写这个的人选择这种符号而不是常用的var == 0方式)?
这是一种风格问题,还是以某种方式影响性能?
Rob*_*ble 33
这是一种避免这样的错误的机制:
if ( var = NULL ) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您在右侧使用变量名称编写它,编译器将能够捕获某些错误:
if ( NULL = var ) { // not legal, won't compile
// ...
}
Run Code Online (Sandbox Code Playgroud)
当然,如果变量名出现在等号的两边,并且有些人发现这种风格没有吸引力,那么这将不起作用.
编辑:
正如Evan在评论中提到的,如果您启用警告,任何体面的编译器都会警告您,例如,gcc -Wall会给您以下内容:
warning: suggest parentheses around assignment used as truth value
Run Code Online (Sandbox Code Playgroud)
您应始终在编译器上启用警告,这是查找错误的最便宜方式.
最后,正如Mike B所指出的,这是一个风格问题,并不影响程序的性能.
Kie*_*eli 11
如果你错了
if ( var = NULL )
Run Code Online (Sandbox Code Playgroud)
代替
if ( var == NULL )
Run Code Online (Sandbox Code Playgroud)
然后只会有编译器警告.如果您颠倒订单:
if ( NULL == var )
Run Code Online (Sandbox Code Playgroud)
如果你把它放在一个编译器错误
if ( NULL = var )
Run Code Online (Sandbox Code Playgroud)
就个人而言,我讨厌阅读这样编写的代码,而我在编码的第一年里只犯了一次错误.=)
推论:尽可能多地使用const。
const int val = 42;
if (val = 43) {
...
}
Run Code Online (Sandbox Code Playgroud)
将无法编译。