在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 中编译失败并出现错误: error C2059: 语法错误: ')' IntelliSense:不正确终止的宏调用
最佳答案
我认为这是不可能的。 C 预编译器扩展宏深度优先,因此 MACROC1 将在 MACROC2 被考虑之前完全扩展。然后,它会找到参数列表不完整的 MACRO 并抛出错误。
一般来说,您应该避免定义构建其他宏调用的宏。编译器往往不同意这些含义。
关于C++ 宏不正确地终止宏调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6866243/