在C++中,有没有一种机制可以表达未终止的宏?
这是一个人为的示例:

#define MACRO(x, y) x + y
#define MACROC1(x) MACRO(x,
#define MACROC2(y) y)
//...expecting 3
int foo = MACROC1(1) MACROC2(2);

我从MSVC收到错误终止宏调用错误。

当我运行 cl -E file.cpp 时,我看到已生成以下代码:
int c = 1 + 1 +  2);

在Visual Studio中,编译失败并显示以下错误:
错误C2059:语法错误:')'
IntelliSense:不正确终止的宏调用

最佳答案

我认为这是不可能的。 C预编译器首先深度扩展宏,因此在考虑MACROC2之前,MACROC1将被完全扩展。然后,它将找到带有不完整参数列表的MACRO并引发错误。

一般来说,应避免定义用于构建其他宏调用的宏。编译器往往不同意这些意思。

关于c++ - C++宏未正确终止的宏调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6866243/

10-09 03:57