在C语言中,是否可以编写自定义条件预处理器指令? 例如:
#define _IF_ (condition, explanation) \
#ifdef condition
非常感谢您的评论。
在C语言中,是否可以编写自定义条件预处理器指令? 例如:
#define _IF_ (condition, explanation) \
#ifdef condition
非常感谢您的评论。
不行。
#define
预处理指令无法发出另一个预处理指令(如#ifdef
),因为#ifdef
不在行的开头。
预处理指令是程序中以
#
开头的行。#
后面是指令名称的标识符。例如,#define
是定义宏的指令。在#
前后也允许有空格。
我能想到的最优雅的语法是这样的。
#define _IF_(condition,explanation) condition
#if _IF_(1 == 2,"A False Case")
"This should not appear"
#endif
#if _IF_(1 == 1,"A True Case")
"This should appear"
#endif
如果您真的需要出于某种原因获得这个语法,并且愿意稍微修改您的构建系统。
您可以通过预处理器两次运行代码以允许此双重扩展。
然而,预处理器宏也无法发出#
字符,因此我们将使用??=
三连符来规避这个问题。
// File a.prec
#define _IF_(condition, explanation) \
??=if condition
#define _ELSE_ ??=else
#define _ENDIF_ ??=endif
_IF_(1==1,"Yep")
"This Text"
_ENDIF_
_IF_(2==1,"Nope")
"Not This Text"
_ENDIF_
-E
标志的编译,可以给我们提供以下结果。https://godbolt.org/z/sJIScN
??=if 1==1
"This Text"
??=endif
??=if 2==1
"Not This Text"
??=endif
-trigraphs
,以将??=
解析为#
。这样可以得到所需的输出:
https://godbolt.org/z/-0rqe5
"This Text"
??=
三字符序列。