0
在指针上下文中使用时被隐式转换为空指针。 2
没有隐式转换为指针类型,因此会发出警告。
您可以在comp.lang.c
常见问题解答第 5 节,特别是问题 5.2中阅读更多内容。
在这里的快速测试中,GCC 和 Clang 都没有警告过这种0
情况(没有额外的标志),但是clang 静态分析器会:
example.c:6:4: warning: Null pointer argument in call to memory copy function
memcpy(buff,0,255);
^~~~~~~~~~~~~~~~~~
/usr/include/secure/_string.h:55:6: note: expanded from macro 'memcpy'
? __builtin___memcpy_chk (dest, src, len, __darwin_obsz0 (dest)) \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
正如这里的评论中其他地方所提到的,如果您通过了,GCC 会发出警告-Wnonnull
(也包括在 中-Wall
):
$ gcc -Wnonnull example.c -o example
example.c: In function ‘main’:
example.c:6: warning: null argument where non-null required (argument 2)