1*b725ae77Skettenis #include <stdio.h> 2*b725ae77Skettenis 3*b725ae77Skettenis #define SPLICE(a, b) INNER_SPLICE(a, b) 4*b725ae77Skettenis #define INNER_SPLICE(a, b) a ## b 5*b725ae77Skettenis #define STRINGIFY(a) INNER_STRINGIFY(a) 6*b725ae77Skettenis #define INNER_STRINGIFY(a) #a 7*b725ae77Skettenis 8*b725ae77Skettenis /* A macro named UNTIL_<func> is #defined until just before the 9*b725ae77Skettenis definition of the function <func>. 10*b725ae77Skettenis 11*b725ae77Skettenis A macro named BEFORE_<func> is not #defined until just before the 12*b725ae77Skettenis definition of <func>. 13*b725ae77Skettenis 14*b725ae77Skettenis The macro WHERE is redefined before each function <func> to the 15*b725ae77Skettenis token list ``before <func>''. 16*b725ae77Skettenis 17*b725ae77Skettenis The macscp IN_MACSCP2_H and IN_MACSCP3_H are defined while 18*b725ae77Skettenis processing those header files; macscp4.h uses them to choose 19*b725ae77Skettenis appropriate function names, output strings, and macro definitions. */ 20*b725ae77Skettenis 21*b725ae77Skettenis #define UNTIL_MACSCP1_1 22*b725ae77Skettenis #define UNTIL_MACSCP2_1 23*b725ae77Skettenis #define UNTIL_MACSCP4_1_FROM_MACSCP2 24*b725ae77Skettenis #define UNTIL_MACSCP4_2_FROM_MACSCP2 25*b725ae77Skettenis #define UNTIL_MACSCP2_2 26*b725ae77Skettenis #define UNTIL_MACSCP1_2 27*b725ae77Skettenis #define UNTIL_MACSCP3_1 28*b725ae77Skettenis #define UNTIL_MACSCP4_1_FROM_MACSCP3 29*b725ae77Skettenis #define UNTIL_MACSCP4_2_FROM_MACSCP3 30*b725ae77Skettenis #define UNTIL_MACSCP3_2 31*b725ae77Skettenis #define UNTIL_MACSCP1_3 32*b725ae77Skettenis 33*b725ae77Skettenis #define WHERE before macscp1_1 34*b725ae77Skettenis #define BEFORE_MACSCP1_1 35*b725ae77Skettenis #undef UNTIL_MACSCP1_1 36*b725ae77Skettenis void macscp1_1()37*b725ae77Skettenismacscp1_1 () 38*b725ae77Skettenis { 39*b725ae77Skettenis puts ("macscp1_1"); 40*b725ae77Skettenis } 41*b725ae77Skettenis 42*b725ae77Skettenis #include "macscp2.h" 43*b725ae77Skettenis 44*b725ae77Skettenis #undef WHERE 45*b725ae77Skettenis #define WHERE before macscp1_2 46*b725ae77Skettenis #define BEFORE_MACSCP1_2 47*b725ae77Skettenis #undef UNTIL_MACSCP1_2 48*b725ae77Skettenis void macscp1_2()49*b725ae77Skettenismacscp1_2 () 50*b725ae77Skettenis { 51*b725ae77Skettenis puts ("macscp1_2"); 52*b725ae77Skettenis } 53*b725ae77Skettenis 54*b725ae77Skettenis #include "macscp3.h" 55*b725ae77Skettenis 56*b725ae77Skettenis #undef WHERE 57*b725ae77Skettenis #define WHERE before macscp1_3 58*b725ae77Skettenis #define BEFORE_MACSCP1_3 59*b725ae77Skettenis #undef UNTIL_MACSCP1_3 60*b725ae77Skettenis void macscp1_3()61*b725ae77Skettenismacscp1_3 () 62*b725ae77Skettenis { 63*b725ae77Skettenis puts ("macscp1_3"); 64*b725ae77Skettenis } 65*b725ae77Skettenis 66*b725ae77Skettenis int main(int argc,char ** argv)67*b725ae77Skettenismain (int argc, char **argv) 68*b725ae77Skettenis { 69*b725ae77Skettenis macscp1_1 (); 70*b725ae77Skettenis macscp2_1 (); 71*b725ae77Skettenis macscp4_1_from_macscp2 (); 72*b725ae77Skettenis macscp4_2_from_macscp2 (); 73*b725ae77Skettenis macscp2_2 (); 74*b725ae77Skettenis macscp1_2 (); 75*b725ae77Skettenis macscp3_1 (); 76*b725ae77Skettenis macscp4_1_from_macscp3 (); 77*b725ae77Skettenis macscp4_2_from_macscp3 (); 78*b725ae77Skettenis macscp3_2 (); 79*b725ae77Skettenis macscp1_3 (); 80*b725ae77Skettenis } 81