【发布时间】:2021-03-23 13:37:31
【问题描述】:
我的 C++ 因不使用而生锈,所以这可能是一个非常微不足道的问题。我在 Visual Studio 2019 上使用 C++ 运行 DLL 项目。我有一个带有参数包的定义指令,如下所示:
#define FUNC(...) \
try \
{ \
(__VA_ARGS__); \
} \
catch (std::exception & e) \
{ \
LOG("error: %s", e); \
return STATUSERROR; \
} \
return STATUSOK;
这在我打电话时有效:
FUNC( i = 0);
但是当我尝试调用以下内容时,它会抛出错误“预期的表达式”
FUNC({
if(some_statement){
return something;
}
return something_else;
});
我使用 \ 作为行继续转义字符,因此问题不源于此。我已经用 C++ 14 和 17 编译了它。这里可能缺少什么?
【问题讨论】:
-
您的宏声明缺少很多反斜杠。现在它将
FUNC定义为空,然后将try/catch放入我假设的全局范围内。 -
反斜杠实际上是存在的,但是 stackoverflow 没有渲染它们,经过多次尝试我无法使它们可见
-
我已经修好了,AFAICT。
标签: c++ macros preprocessor