在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:不正确地终止宏调用
答案 0 :(得分:5)
我不认为这是可能的。 C预编译器首先扩展宏深度,因此MACROC1将在MACROC2被考虑之前完全展开。然后,它将找到带有和不完整参数列表的MACRO并抛出错误。
一般来说,您应该避免定义构建其他宏调用的宏。编制者倾向于不同意这些意思。
答案 1 :(得分:1)
您的代码将转换为:
int foo = MACRO(1, 2;
哪个错误 - 它是宏MACRO的不完整(不正确终止)调用。