当我调用一个需要指针的函数并传入一个值时,我收到了这个警告,我喜欢这样。
但是当该值恰好是文字“0”时,我没有收到警告。我认为这是因为 C 认为它是空指针,而不是值。有什么方法仍然可以得到 0 字面量的警告,因为我已经有一些错误了。
最佳答案
GCC 支持 nonnull
attribute on function parameters可以做你想做的事(只要启用了 -Wnonnull
警告选项):
void* foo( int* cannot_be_null) __attribute((nonnull (1))) ;
int main(int argc, char *argv[])
{
int x;
foo(&x);
foo(0); // line 13 - generates a -Wnonnull warning
return 0;
}
当使用 gcc -c -Wnonnull test.c
编译时,我得到:
test.c: In function 'main':
test.c:13:5: warning: null argument where non-null required (argument 1) [-Wnonnull]
您可以使用 -Werror=nonnull
强制这是一个错误。
请注意,仅当使用空指针文字(0
的另一个名称)时才会抛出此警告 - 以下代码不会触发警告:
int* p = NULL;
foo(p);
关于c - 没有转换的整数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610575/