我有一个接口,其中一些函数是用nonnull GCC函数属性声明的,例如:
// declaration in .h
__attribute__((nonnull))
int foo(const char *bar);
[...]
// definition in .c
int foo(const char *bar) {
if (bar == NULL)
return -1;
// do something with bar
...
}
但零判断触发了-Wnonnull-compare%GCC的警告. 问题是nonnull属性的文档说明它:
使编译器在调用[...]时判断参数[...]都是非空的.
问题是,它没有说明任何有关运行时的内容.因此,如果我为了取悦GCC而删除此复选框,我可能会隐藏或在必要时检测到调用程序中的错误.
那么,在这种情况下,这一警告应该沉默吗?或者,文档中是否存在某种错误,使得代码没有经过判断,实际上是正确的?
FTR,我的编译器版本是11.4.0.