godbolt.org
Compiler Explorer - C (x86-64 gcc 10.2)
// Utilities
#define EMIT_ERROR(message) message
#define NOTHING
#define EXPAND(...) __VA_ARGS__
#define CAT(x, y) PRIMITIVE_CAT(x, y)
#define PRIMITIVE_CAT(x, y) x##y
#define STRINGIFY(x) PRIMITIVE_STRINGIFY(x)
#define PRIMITIVE_STRINGIFY(x) #x
// Conditions
#define IF(condition, if_true_body, if_false_body) CAT(IF_, condition)(if_true_body, if_false_body)
#define IF_TRUE(if_true_body, _if_false_body) if_true_body
#define IF_FALSE(_if_true_body, if_false_body) if_false_body
// General recursion
#define REC REC_0
#define REC_0(op, ...) CAT(REC_, REC_DECISION(op, 1, __VA_ARGS__))(op, REC_ARGS(op, __VA_ARGS__))
#define REC_1(op, ...) CAT(REC_, REC_DECISION(op, 2, __VA_ARGS__))(op, REC_ARGS(op, __VA_ARGS__))
#define REC_2(op, ...) CAT(REC_, REC_DECISION(op, 3, __VA_ARGS__))(op, REC_ARGS(op, __VA_ARGS__))
#define REC_3(op, ...) CAT(REC_, REC_DECISION(op, 4, __VA_ARGS__))(op, REC_ARGS(op, __VA_ARGS__))
#define REC_4(op, ...) CAT(REC_, REC_DECISION(op, 5, __VA_ARGS__))(op, REC_ARGS(op, __VA_ARGS__))
#define…