没有强制转换的整数指针

Mui*_*uis 7 c gcc pointers casting c99

当我调用一个需要指针的函数时,我传入一个值,我得到了这个警告,我喜欢这样.

但是当值恰好是字面值'0'时,我没有得到警告.我认为这是因为C认为它是空指针,而不是值.有没有办法仍然得到0文字的警告,因为我已经有一些错误因为它.

Mic*_*urr 5

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)