如何在三元运算中使用“返回”作为宏?

Yve*_*ves 0 c++ macros

我有一个C ++代码,如下所示:

#define xxx return

int main()
{
    xxx 0;
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作。

现在,我像这样更改代码:

#define xxx return
#define TEST(X) ((X) == (false) ? (xxx 1) : ())

int main()
{
    bool b = false;
    TEST(b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一句话,我想return 1如果bfalse。但是我得到了错误:

error: expected primary-expression before ‘return’
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

return是一个语句,而不是一个表达式。并且的所有三个操作数都?:只能是表达式。该return关键字不能出现在其中任何一个,从宏观还是没有扩大。

在您的特定示例中可以使用的宏非常简单

#define TEST(X) if((X) == (false)) xxx 1
Run Code Online (Sandbox Code Playgroud)

但是,如果您在处理宏时遇到问题,请警惕悬而未决的其他问题,并证明上面的内容对此不可行