C++ 宏不正确地终止宏调用

标签 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);

我收到来自 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/

相关文章:

c++ - 如何制作高效的C++跳转表?

c++ - 如何防止从某些代码段调用函数?

c++ - 为什么 `std::initializer_list`经常按值传递?

c++ - Qt中用指针改变布局内容

c++ - C++ 中 lambda 的前向声明

python - 那是奎因还是什么?

c++ - 调试和预处理器指令

可变参数宏中的 C99 兼容嵌套调用

c++ - 命名管道和 "GetNamedPipeHandleState"

python - 在python中分离复数的实部和虚部