【发布时间】:2019-09-10 00:07:02
【问题描述】:
我在 SO 上找到了一些现有的答案,但我实际上不明白 there 的一切是如何工作的。
基本上,我想在 if/switch 条件下定义一个宏
if (condition)
{
#define SOME_MACRO
}
所以,如果某些条件为真,就会定义一些新的宏。 但是,就目前而言,它只是定义了宏。我知道这不是真正应该这样做的,但对此没有正常的解释。
【问题讨论】:
-
不,预处理器发生在编译时,但
condition只在运行时知道。 -
您应该以更一般的方式解释您想要实现的目标。您的示例代码应该显示您想要对宏执行的操作。对于您的实际问题,可能有不同的解决方案。
-
@StupiStupiDu 当然,我也阅读了 cmets 的答案。您解释说要根据键盘输入定义宏,这是不可能的,但您没有解释需要宏的目的。所以你只解释了你想到的解决方案的想法,而不是整个问题或用例。
-
@StupiStupiDu ;当然有解决方案;只是不是使用预处理器的解决方案。需要明确的是,以
#开头的所有行都是预处理器指令,而不是 C 语言的一部分。预处理器用于条件复杂化(包括或排除特定代码部分)和定义宏 - 预处理器用定义文本替换的符号和参数 - 之前编译器本身解析 结果预处理源。它不是编程语言,也不是 C 代码。您想要做的事情可以(并且应该)用 C 代码完成。
标签: c++ c macros conditional