我想编写一个预处理器宏,如果它的参数是带括号的标记元组,它会做一件事,如下所示:
MY_MACRO((x, y))
如果它只是一个令牌,还有其他东西,如下所示:
MY_MACRO(x)
那可能吗?
如何区分空格分隔的标记的数量,即MY_MACRO(x)
and MY_MACRO(x y)
?
请注意,我并没有尝试根据参数的数量进行重载 - 在所有情况下它都是一元宏。
EDIT:如果有帮助的话我愿意使用可变参数宏
至于你的第一个问题,以下宏可能会满足你的目的:
#define CONCAT_( x, y ) x ## y
#define CONCAT( x, y ) CONCAT_( x, y )
#define IS_SINGLE_1(...) 0
#define IGNORE(...)
#define IS_SINGLE_2_0 0 IGNORE(
#define IS_SINGLE_2_IS_SINGLE_1 1 IGNORE(
#define IS_SINGLE( x ) CONCAT( IS_SINGLE_2_, IS_SINGLE_1 x ) )
IS_SINGLE((x, y)) // 0
IS_SINGLE(x) // 1
Macro IS_SINGLE
如果参数是单个标记,则扩展为 1,
否则,0。
希望这可以帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)