GCC支持nonnull函数参数的属性,可以执行您想要的操作(只要-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;
}
Run Code Online (Sandbox Code Playgroud)
使用gcc -c -Wnonnull test.c我得到的编译:
test.c: In function 'main':
test.c:13:5: warning: null argument where non-null required (argument 1) [-Wnonnull]
Run Code Online (Sandbox Code Playgroud)
你可以强制这是一个错误-Werror=nonnull.
请注意,仅当使用空指针文字(另一个名称0)时才会抛出此警告- 以下代码不会触发警告:
int* p = NULL;
foo(p);
Run Code Online (Sandbox Code Playgroud)