All pastes #2061886 Raw Edit

Miscellany

public text v1 · immutable
#2061886 ·published 2011-05-17 00:56 UTC
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;
}