我在一些代码中注意到了一段时间的以下语法:
if( NULL == var){ //... }
要么
if( 0 == var){ //... }
和类似的事情.
有人可以解释为什么写这个的人选择这种符号而不是常用的var == 0
方式)?
这是一种风格问题,还是以某种方式影响性能?
这是一种避免这样的错误的机制:
if ( var = NULL ) { // ... }
如果您在右侧使用变量名称编写它,编译器将能够捕获某些错误:
if ( NULL = var ) { // not legal, won't compile // ... }
当然,如果变量名出现在等号的两边,并且有些人发现这种风格没有吸引力,那么这将不起作用.
编辑:
正如Evan在评论中提到的,如果您启用警告,任何体面的编译器都会警告您,例如,gcc -Wall
会给您以下内容:
warning: suggest parentheses around assignment used as truth value
您应始终在编译器上启用警告,这是查找错误的最便宜方式.
最后,正如Mike B所指出的,这是一个风格问题,并不影响程序的性能.
如果你错了
if ( var = NULL )
代替
if ( var == NULL )
然后只会有编译器警告.如果您颠倒订单:
if ( NULL == var )
如果你把它放在一个编译器错误
if ( NULL = var )
就个人而言,我讨厌阅读这样编写的代码,而我在编码的第一年里只犯了一次错误.=)
避免
if (var = NULL)
窃听器
引用乔尔论软件,《游击面试指南》:
有时,您会看到C程序员编写类似if(0 == strlen(x))的内容,将常量放在==的左侧。这是一个非常好的迹象。这意味着他们将=和==混淆了太多次,并强迫自己学习新的习惯来避免这种陷阱。
(我并不是这种“最佳实践”的忠实拥护者。)
推论:尽可能多地使用const
。
const int val = 42; if (val = 43) { ... }
将无法编译。