如何在函数宏内使用错误

时间:2018-08-21 16:00:40

标签: c-preprocessor preprocessor

我需要类似的东西

#define NOTHING
#define DEFD(a) ((0 == a)?(NOTHING):(1))

但是显示错误。目标仅将宏定义为有值时才将其定义为有值,为零则应定义为无任何错误

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));