C 什么';if(varName)和if(varName!=NULL)之间的区别是什么?

C 什么';if(varName)和if(varName!=NULL)之间的区别是什么?,c,performance,variables,if-statement,null,C,Performance,Variables,If Statement,Null,这两者的区别是什么: if( varName != NULL ){ // Do something } 以及: 我的意思是,在处理速度方面有区别吗?还是只有更好的表现 PD:我与C.合作。在性能方面没有差异,但意图的差异可能很大。假设NULL宏定义为(void*)0,则此代码: if( varName != NULL ) { // Do something } 强制varName必须是指针对象。例如,以下代码将发出错误消息: int varName = 0; if ( varNam

这两者的区别是什么:

if( varName != NULL ){
  // Do something
}
以及:

我的意思是,在处理速度方面有区别吗?还是只有更好的表现


PD:我与C.合作。

在性能方面没有差异,但意图的差异可能很大。假设
NULL
宏定义为
(void*)0
,则此代码:

if( varName != NULL ) {
   // Do something
}
强制
varName
必须是指针对象。例如,以下代码将发出错误消息:

int varName = 0;
if ( varName != NULL ) {
    // Do something
}
错误:指针和整数之间的比较


因此,这种做法可能被认为是一种防御性编程,尽管其价值值得讨论,因为这两种形式都是同样惯用的。

没有区别回答这个问题的最佳方法是使用
-s
选项编译,然后查看生成的程序集。关闭优化后,可能会有所不同,但启用优化后,汇编代码应该相同。这是一个品味问题,我喜欢
if(varName!=NULL)
。一些类似于<代码>(VARNEX)< /C> >你做了一些我认为非常丑陋的事情>代码>如果(<某某) <代码> < /COD>是一个空白,看起来很可怕。无论如何,这个问题应该结束了。取决于
varName
@iharob的类型,它对你来说很难看,我知道这是你的观点,我尊重它,但对我来说,更容易理解。为什么“这个问题应该结束”?我的意思是,这个平台不是帮助那些有编码或编程问题的人找到解决方案吗?如果你想关闭这个问题,因为你不把空白考虑到if语句中并不意味着这个问题应该被关闭,而且它确实使代码更可读。当查看代码并看到与
NULL
的比较时,您知道类型是指针而不是整数类型,但没有找到变量的声明。@Weather Vane:一个值得怀疑的好处,有点类似于抛出
malloc
结果的习惯。后者的支持者还经常声称,这有助于他们“在没有找到声明的情况下了解类型”。事实上,“了解类型”是C开发人员通常需要能够“行走”的一条众所周知的拐杖。我想说,好的编程实践需要类型无关的代码。是的,即使是C。它更可读。开发人员只需学会阅读和理解这种类型不可知的代码,而不必依赖确切的类型信息,还必须学会不用拐杖走路。@AnT您与casting
malloc
的类比完全不同。这是一个好消息,还有你的暗示,我没有拐杖就走不了路。
int varName = 0;
if ( varName != NULL ) {
    // Do something
}