gpt4 book ai didi

c - 宏三元逗号表达式用作语句时会导致警告

转载 作者:行者123 更新时间:2023-11-30 14:37:29 26 4
gpt4 key购买 nike

我定义了一个宏来记录 NULL 指针。因为我的代码中有 NULL 检查,所以宏是一个三元组,它总是返回参数并在参数为 NULL 时调用函数。

但是,如果在 if 语句之外使用宏,则会导致编译警告(gcc:逗号表达式的右侧操作数无效)。奇怪的是,即使使用 -Weverything,clang 也不会产生警告。

到目前为止,我提出的解决方案是定义另一个宏,将表达式包装在没有正文的 if 中。

#define NULLPRINT(X)                        \
((X) ? (X) \
: (fprintf(stderr, \
"%s:%u: %s: %s is NULL.\n", \
__FILE__, \
__LINE__, \
__func__, \
#X), \
stacktrace(), \
(X)))

#define IF_NULLPRINT(X) do {if(NULLPRINT(X)){}} while(0)

有没有办法在不重复宏的情况下做到这一点并避免编译器警告?显然没有关闭警告。

最佳答案

尝试将其转换为void:

(void) NULLPRINT(...);

这通常会抑制有关未使用的表达式值的警告。

您可以定义另一个宏来隐藏它。

关于c - 宏三元逗号表达式用作语句时会导致警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57300918/

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