gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:30:32 31 4
gpt4 key购买 nike

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com