【发布时间】:2020-09-18 17:58:48
【问题描述】:
我有一个宏,SOME_MACRO。它需要一个参数。
SOME_MACRO的定义:
#define SOME_MACRO(arg) __SOME_MACRO(arg)
如果arg 是0,我还希望__SOME_MACRO(arg) 扩展到"ABC"。如果arg 不为零,则__SOME_MACRO(arg) 应扩展为"DEF"
假设我用参数 0 调用,即:SOME_MACRO(0)
我需要在预处理时测试参数是否为零。
#if <argument is zero> // line 1
#define __SOME_MACRO(arg) "ABC"
#elif
#define __SOME_MACRO(arg) "DEF"
#endif
我的问题是:第 1 行应该是什么?
举个例子:
SOME_MACRO(2) 应扩展为 "DEF"
SOME_MACRO(0) 应扩展为 "ABC"
【问题讨论】:
-
SOME_MACRO(1+3-4)你想要什么? -
通常,C 标准不提供宏的条件扩展功能。在某些情况下,有些杂乱无章,但应尽可能避免。通常,当有人试图做这种事情时,会有更好的方法来实现他们的实际目标。你想用这个来完成什么——你为什么需要它?
-
@EricPostpischil。
1+3-4不是很关键。我相信这种情况不会发生(在我的代码中)。所以我基本上不关心1+3-4。严格来说,我希望它扩展到"ABC",但我仍然不太关心这种情况。 -
#define SOME_MACRO(arg) ((arg) ? "DEF" : "ABC") -
@NeedSomeLuck
__SOME_MACRO请不要使用带有两个前导下划线的标识符。此类标识符由 C 标准保留。
标签: c linux gcc linux-kernel c-preprocessor