未使用NULL宏指定空指针常量

时间:2014-02-03 13:15:07

标签: c++ null

我正在使用一种分析c ++代码的工具。我的代码看起来像这样:

#define NULL 0

...
char * buff;
if (buff != NULL) { // -> error The null-pointer-constant is not specified using the NULL macro
 ...
}

更新:如果我删除#define null行,我会收到相同的错误:

const int* var = 0; 

你知道为什么这个语法不起作用, 这是因为NULL被定义为0?

由于

1 个答案:

答案 0 :(得分:2)

NULL宏的值是在C ++中定义的实现。

考虑到这一点,您的静态分析工具抱怨您使用自己定义的值可能是错误的,这是合理的。 (即使它基本上适用于所有编译器)

话虽如此,如果您有权访问C ++ 11,首选方法是使用关键字nullptr而不是NULL,因为它解决了使用NULL的大部分问题}或0

示例(实时代码:http://ideone.com/EmahXG):

int foo( int   );
int foo( int * );

foo( NULL    ); // Will call first overload if NULL is defined as 0
foo( nullptr ); // Will call second overload as nullptr is not implicitly convertable to non-pointer types.