MW_*_*dev 3 c++ definition c-preprocessor
在C ++中,有没有一种机制可以表达未终止的宏?这是一个人为的示例:
#define MACRO(x, y) x + y
#define MACROC1(x) MACRO(x,
#define MACROC2(y) y)
//...expecting 3
int foo = MACROC1(1) MACROC2(2);
Run Code Online (Sandbox Code Playgroud)
我从MSVC收到错误终止宏调用错误。
当我运行cl -E file.cpp时,我看到下面的代码已经生成:
int c = 1 + 1 + 2);
Run Code Online (Sandbox Code Playgroud)
在Visual Studio中,编译失败并显示以下错误:错误C2059:语法错误:')'IntelliSense:不正确终止的宏调用
我认为这是不可能的。C预编译器首先深度扩展宏,因此在考虑MACROC2之前,MACROC1将被完全扩展。然后,它将找到带有不完整参数列表的MACRO并引发错误。
一般来说,应该避免定义用于构建其他宏调用的宏。编译器往往不同意这些意思。
| 归档时间: |
|
| 查看次数: |
3869 次 |
| 最近记录: |