Chu*_*ang 6 c macros gcc compiler-warnings suppress-warnings
我正在研究一个C程序.有一个函数需要两个指针参数,调用它cmp().cmp()出于说明的原因,我在这里提供了一个简化的替身:
int cmp(struct foo *a, struct foo *b)
{
return a->bar == b->bar;
}
Run Code Online (Sandbox Code Playgroud)
我想制作一个NULL-check宏,如下所示:
#define SAFE_CMP(a,b) (((a) != NULL && (b) != NULL) ? cmp((a),(b)) : 0)
Run Code Online (Sandbox Code Playgroud)
我觉得这很好.但是,在使用-Wall以及将警告视为错误的compliation开关进行编译时,以下代码很麻烦:
int baz(struct foo *a)
{
struct foo b;
/* ... */
return SAFE_CMP(a, &b);
}
Run Code Online (Sandbox Code Playgroud)
因为gcc警告"b的地址永远不会为NULL".
有没有办法解决这种情况?具有多种辅助宏象SAFE_CMP_1(safe_arg,unsafe_arg)和SAFE_CMP_2(unsafe_arg,safe_arg)等是我想要的最后一件事.我想让一个助手宏适用于所有情况.
caf*_*caf 12
这似乎压制了我的警告:
#define SAFE_CMP(a,b) (((void *)(a) != NULL && (void *)(b) != NULL) ? cmp((a),(b)) : 0)
Run Code Online (Sandbox Code Playgroud)
......但就个人而言,我只是创建safe_cmp()一个功能本身.
int safe_cmp(struct foo *a, struct foo *b) {
return (a && b) ? (a->bar == b->bar) : 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7546 次 |
| 最近记录: |