【问题标题】:C++ macro defined using do while causing error使用do定义的C ++宏导致错误
【发布时间】:2015-04-29 13:13:53
【问题描述】:

我需要运行两段代码。 (不,我不允许更改其中任何一个)。

第一段定义了一个宏

#define MACRO do { /* stuff in multiple lines and do not return a value */ } while (0)

第二部分在if 语句中使用另一个宏

if (ANOTHER_MACRO) { /* do some stuff */ }

我需要让ANOTHER_MACRO 使用MACRO,并且我可以定义ANOTHER_MACRO

我认为 inline 函数是正确的方法,但无论是使用宏还是使用 inline 函数,我都无法让它工作。有什么建议吗?

【问题讨论】:

  • 所以你需要在条件中做一些事情而不是仅仅提供一个条件?
  • 你为什么还要在宏上浪费时间?这是 C++,不是 C,年份是 2015 年,而不是 1985 年 - 使用(内联)函数。
  • 尝试内联或 lambda 表达式...
  • 这真的是MACRO的定义吗?另外,我不知道你在问什么。
  • 使用由 ANOTHER_MACRO 定义的 lambda 表达式(假设你至少有一个 c++11 编译器)

标签: c++ macros


【解决方案1】:

只需插入一个函数以在一侧调用MACRO 并在另一侧返回一个值。

#define ANOTHER_MACRO theFunc()

bool theFunc() {
    MACRO;
    return /* something */;
}

【讨论】:

  • 我曾尝试将这种方式作为内联函数,但它抱怨语法就像宏一样。一个真正的函数定义解决它,谢谢
  • @lulijeta 如果您还想知道为什么您尝试的方法不起作用,您需要将它连同它生成的编译器错误一起添加到您的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多