gpt4 book ai didi

c - 如何解决 GCC 警告 "the address of XXX will never be NULL"?

转载 作者:太空狗 更新时间:2023-10-29 17:18:10 25 4
gpt4 key购买 nike

我正在编写 C 程序。有一个函数接受两个指针参数,称之为cmp()。出于说明原因,我在这里展示了 cmp() 的简化替代品:

int cmp(struct foo *a, struct foo *b)
{
return a->bar == b->bar;
}

我想制作一个 NULL 检查宏,如下所示:

#define SAFE_CMP(a,b) (((a) != NULL && (b) != NULL) ? cmp((a),(b)) : 0)

我认为这完全没问题。但是,在同时使用-Wall和将警告视为错误的编译开关进行编译时,以下代码很麻烦:

int baz(struct foo *a)
{
struct foo b;
/* ... */
return SAFE_CMP(a, &b);
}

因为 gcc 警告说“b 的地址永远不会为 NULL”

有什么办法可以解决这种情况?拥有各种辅助宏,如 SAFE_CMP_1(safe_arg,unsafe_arg)SAFE_CMP_2(unsafe_arg,safe_arg) 等是我最不想要的。我想要一个适用于所有情况的辅助宏。

最佳答案

这似乎抑制了对我的警告:

#define SAFE_CMP(a,b) (((void *)(a) != NULL && (void *)(b) != NULL) ? cmp((a),(b)) : 0)

...但就我个人而言,我只会将 safe_cmp() 创建为函数本身。

int safe_cmp(struct foo *a, struct foo *b) {
return (a && b) ? (a->bar == b->bar) : 0;
}

关于c - 如何解决 GCC 警告 "the address of XXX will never be NULL"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3154807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com