在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/