我需要类似的东西
#define NOTHING
#define DEFD(a) ((0 == a)?(NOTHING):(1))
但是显示错误。目标仅将宏定义为有值时才将其定义为有值,为零则应定义为无任何错误
答案 0 :(得分:0)
通过我从this example引用的方式获得答案
#define PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__
#define COMPL(b) PRIMITIVE_CAT(COMPL_, b)
#define COMPL_0 1
#define COMPL_1 0
#define CHECK_N(x, n, ...) n
#define CHECK(...) CHECK_N(__VA_ARGS__, 0,)
#define PROBE(x) x, 1,
#define IS_PAREN(x) CHECK(IS_PAREN_PROBE x)
#define IS_PAREN_PROBE(...) PROBE(~)
#define NOT(x) CHECK(PRIMITIVE_CAT(NOT_, x))
#define NOT_0 PROBE(~)
#define BOOL(x) COMPL(NOT(x))
#define IIF(c) PRIMITIVE_CAT(IIF_, c)
#define IIF_0(t, ...) __VA_ARGS__
#define IIF_1(t, ...) t
#define IF(c) IIF(BOOL(c))
#define EAT(...)
#define EXPAND(...) __VA_ARGS__
#define WHEN(c) IF(c)(EXPAND, EAT)
#define SQUARE(b,a) (WHEN(a)((b)*(b)))
将适用于
printf("---%d",SQUARE(2));
但是如果使用零将显示错误
printf("---%d",SQUARE(0));