rendered paste body#include <stdio.h>
#define PP_NARG(...) \
PP_NARG_(__VA_ARGS__,PP_RSEQ_N())
#define PP_NARG_(...) \
PP_ARG_N(__VA_ARGS__)
#define PP_ARG_N( \
_1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \
_11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \
_21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \
_31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \
_41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \
_51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \
_61,_62,_63,N,...) N
#define PP_RSEQ_N() \
mock63, mock62, mock61, mock60, mock59, mock58, mock57, mock56, mock55, mock54,\
mock53, mock52, mock51, mock50, mock49, mock48, mock47, mock46, mock45, mock44,\
mock43, mock42, mock41, mock40, mock39, mock38, mock37, mock36, mock35, mock34,\
mock33, mock32, mock31, mock30, mock29, mock28, mock27, mock26, mock25, mock24,\
mock23, mock22, mock21, mock20, mock19, mock18, mock17, mock16, mock15, mock14,\
mock13, mock12, mock11, mock10, mock9, mock8, mock7, mock6, mock5, mock4,\
mock3, Ensure2, Ensure1, Ensure1
#define Ensure1(p1) void spec__##p1()
#define Ensure2(p1, p2) void tag__##p1##_spec__##p2()
#define Ensure(...) PP_NARG(__VA_ARGS__)(__VA_ARGS__)
Ensure(do_something) {
printf("Ensure: spec\n");
}
Ensure(zzz, do_something_else) {
printf("Ensure: noun / spec\n");
}
int main (void) {
return 0;
}