【问题标题】:Trying to write a macro, but not sure what's wrong尝试编写宏,但不知道出了什么问题
【发布时间】:2015-11-10 00:47:19
【问题描述】:

我一直在玩宏。我看到了一篇有趣的帖子,我可以在其中构造我的宏,比如结构 here。我已经尝试实现一个,这就是我目前拥有的。

#define Max(X,Y) \
do { \
     auto var1 = x; \
     auto var2 = y;  \
     var1 > var2 ? var1 : var2; \
} while (0)

在我的主要功能中

void main()
{
   int result = Max(10, 5)
}

但我遇到了所有这些错误,

error C2059: syntax error : 'do'
error C2143: syntax error : missing ';' before '{'

不知道我做错了什么。我只是从上面的超链接中复制了代码并修改了代码。任何帮助将不胜感激!

【问题讨论】:

  • 为什么要使用宏?只需将它填充到一个函数中,然后让编译器内联它。
  • 宏不是函数,也不是 lambda,因为您显然正在使用它们...
  • @CaptainObvlious 我删除了 c++ 标签,但我只是想玩玩并了解如何使用宏。
  • 哦,像result = Max(++i, x) 这样的操作会让调试变得非常有趣。
  • 您知道宏是文本替换。然后你应该看到故障在于使用。 int result = do {...} while (0); 无效。

标签: macros


【解决方案1】:

考虑宏扩展成什么:

int result = do {
     auto var1 = x;
     auto var2 = y;
     var1 > var2 ? var1 : var2;
} while (0);

这不是有效的 C++,因为循环在 C++ 中没有返回值。

哦,我确实注意到宏的一个小问题。参数名称大写 (X, Y),但使用小写 (x, y)。这不会按预期工作。您必须在宏体中使用与宏参数相同的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多