C 宏内部的未初始化变量警告不正确
我的代码中使用了一个宏,它包装函数调用并检查返回代码。宏非常简单:C 宏内部的未初始化变量警告不正确,c,macros,warnings,C,Macros,Warnings,我的代码中使用了一个宏,它包装函数调用并检查返回代码。宏非常简单: #define CALL_POP(FUNC) \ do \ { \ my_errno = FUNC;
#define CALL_POP(FUNC) \
do \
{ \
my_errno = FUNC; \
if (unlikely(my_errno != SUCCESS)) goto fn_exit; \
} while (0)
但是,当使用-Wall
和-O3
进行编译时,我的编译器(GCC 5.3.1)会抱怨未初始化的变量:
filename.h:194:10: warning: 'my_errno' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (unlikely(my_errno!=SUCCESS)) goto fn_exit; \
^
这看起来很奇怪,因为变量在前面的一行中被明确初始化,并且在其他地方被声明(在调用这个宏之前)
下面是调用此宏的示例:
int my_errno;
CALL_POP(send
(&ctrl, NULL, 0, recv->remote_info.origin_rank,
recv->comm_ptr, recv->remote_info.ackreq, FALSE));
...
fn_exit:
return my_errno;
有人知道为什么它会抱怨我在这里的用法吗?我相信你遗漏了一些转义,在宏名称后转义换行 差不多
#define CALL_POP(FUNC) \
do { \
// stuff \
do_stuff() \
}while(0);
如何使用这个宏?(MCVE?)作为尤金尼什。他说,看看如何使用该宏来查看
FUNC
将是什么会很有用。我在问题中添加了一个用法示例。我正在努力得到一个削减MCVE,我可以很容易地张贴。如果上面的例子不够有用,我可以继续努力。我的错误是如何定义的?顺便说一句,你是说这是一个例子的呼吁。这是它唯一的叫法吗?还有其他方法吗?对不起,我是想加上那个部分。再次澄清。在“\”转义字符后有一个换行符,此代码格式设置内容是oddHm。什么这里一切都很好。