如何制作多行预处理器宏?我知道如何制作一行:
#define sqr(X) (X*X)
但我需要这样的东西:
#define someMacro(X)
class X : public otherClass
{
int foo;
void doFoo();
};
我怎样才能让它工作?
这只是一个例子,真正的宏可能很长。
原文由 noisy cat 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是 2021 年,我们真的应该朝着 inline
。不正确、不必要和过度使用宏会使代码膨胀,而且它们很难调试(阅读起来很难调试)
inline void foo(x)
{
// do whatever with x
}
但是,如果确实需要宏,请用 do { } while(0);
围绕它们,原因在这篇文章中解释了 为什么在宏中使用显然毫无意义的 do-while 和 if-else 语句?
原文由 asio_guy 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您使用
\
作为行继续转义字符。编辑:正如@abelenky 在评论中指出的那样,
\
字符 必须是该行的最后一个字符。如果不是(即使之后只是空白),您将在其后的每一行上收到令人困惑的错误消息。