有谁知道如何,或者甚至可以创建一个可变参数宏,如果它的参数不是定义的宏,则扩展为 0,但如果它的参数是定义的宏,则扩展为 1?(我使用的是 c99。)
#define BOB
#define SUE 45
#define IS_DEFINED(...) ???
IS_DEFINED(JOE) <---- expands to 0
IS_DEFINED(BOB) <---- expands to 1 (it's okay if this one doesn't work)
IS_DEFINED(SUE) <---- expands to 1
编辑:我特别不想要任何#if
相关的解决方案......它需要是一个可变参数宏(如果可能的话)所以我可以做这样的事情:
#define CAT_(x, y) x ## y
#define CAT(x, y) CAT_(x, y)
#define CLEANUP0(...) ABC <--- treats __VA_ARGS__ one way
#define CLEANUP1(...) XYZ <--- treats __VA_ARGS__ a different way
#define CLEANUP(...) CAT(CLEANUP, IS_DEFINED(DEFAULT))(__VA_ARGS__)
Where ABC
&是其他处理方式非常不同XYZ
的扩展的占位符。__VA_ARGS__