【问题标题】:Define macros with condition in C++在 C++ 中定义带条件的宏
【发布时间】:2019-09-10 00:07:02
【问题描述】:

我在 SO 上找到了一些现有的答案,但我实际上不明白 there 的一切是如何工作的。

基本上,我想在 if/switch 条件下定义一个宏

if (condition)
{
#define SOME_MACRO
}

所以,如果某些条件为真,就会定义一些新的宏。 但是,就目前而言,它只是定义了宏。我知道这不是真正应该这样做的,但对此没有正常的解释。

【问题讨论】:

  • #if
  • 不,预处理器发生在编译时,但 condition 只在运行时知道。
  • 您应该以更一般的方式解释您想要实现的目标。您的示例代码应该显示您想要对宏执行的操作。对于您的实际问题,可能有不同的解决方案。
  • @StupiStupiDu 当然,我也阅读了 cmets 的答案。您解释说要根据键盘输入定义宏,这是不可能的,但您没有解释需要宏的目的。所以你只解释了你想到的解决方案的想法,而不是整个问题或用例。
  • @StupiStupiDu ;当然有解决方案;只是不是使用预处理器的解决方案。需要明确的是,以# 开头的所有行都是预处理器指令,而不是 C 语言的一部分。预处理器用于条件复杂化(包括或排除特定代码部分)和定义宏 - 预处理器用定义文本替换的符号和参数 - 之前编译器本身解析 结果预处理源。它不是编程语言,也不是 C 代码。您想要做的事情可以(并且应该)用 C 代码完成。

标签: c++ c macros conditional


【解决方案1】:

您不能像这样混合使用宏和代码。宏都是在编译代码之前处理的,它只是一个方便的功能,可以节省打字(并使代码更易于阅读)。

有条件的宏语法,例如,你可以这样做:

#if Condition
#define X
#endif

有条件地定义一个宏。

【讨论】:

  • 如果键盘输入返回整数怎么办。因此,整数在代码中。如何使用条件 #if x == 1 #define MACRO #endif ?这样做可以吗?
  • 同样在 C++ 中,您通常应该尽量避免使用宏。例如,您的示例链接显示了它们的常见问题之一。在 C++ 中,可以通过宏实现的许多事情都可以使用模板、constexpr 或其他技术来完成。
  • 不 - 你的建议是行不通的。你想做什么?要使宏生效,必须重新编译代码,这不会发生在按键上。
  • 嗯。我想我必须更多地了解这些。实际上,这只是实验,所以我会更好地理解这种语言(Java之后)。谢谢,我想我明白下一步该做什么了
猜你喜欢
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多