我有一个c++代码,如下所示:
#define xxx return
int main()
{
xxx 0;
}它的工作方式与预期一致。
现在我像这样修改代码:
#define xxx return
#define TEST(X) ((X) == (false) ? (xxx 1) : ())
int main()
{
bool b = false;
TEST(b);
return 0;
}一言以蔽之,如果b是false,我想要return 1。但是我得到了一个错误:
error: expected primary-expression before ‘return’发布于 2019-06-12 15:21:08
return是一个语句,而不是一个表达式。并且?:的所有三个操作数只能是表达式。return关键字不能出现在它们中的任何一个中,无论是否从宏展开。
在您的特定示例中工作的宏将是一个简单的
#define TEST(X) if((X) == (false)) xxx 1不过,如果你摆弄宏的话,要小心dangling else problem,并用它来验证上面的代码。
发布于 2019-06-12 15:21:52
在三元运算符中不能有return语句。你需要使用一个普通的if。
#define TEST(X) if ((X) == false) return 1;https://stackoverflow.com/questions/56556601
复制相似问题