应该使用`!var`还是`var == NULL`?

Mat*_*att 7 c pointers

在测试时NULL,我看到了很多使用的代码!var.有没有理由使用这种测试而不是更明确的测试var == NULL.if (var)对于非空项目,同样也是一个正确的测试?

oua*_*uah 11

和...之间的不同:

!var

var == NULL

在第二种情况下,如果编译器var不是指针类型并且NULL使用强制转换(如(void *) 0)定义,则编译器必须发出诊断.

另外(如注释中的@bitmask所指)使用NULL宏,您需要包含一个定义NULL宏的标准头.在C中的NULL宏在几个头文件中定义为方便起见(如stddef.h,stdio.h,stdlib.h,string.h,等等).

否则这两个表达式是等价的,这只是一个品味问题.使用你觉得更舒适的那个.

而你的第二个问题与上面提到的差异if (var)相同if (var != NULL).

  • 请注意,您需要定义几个"NULL"标题中的至少一个. (2认同)