我正在使用一种分析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?
由于
答案 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.