1 #define e THIS_SHOULD_NOT_BE_EXPANDED 2 #define E NOR_THIS 3 #define p NOT_THIS_EITHER 4 #define P AND_SURELY_NOT_THIS 5 #define OK CRAZY_BUT_TRUE_THIS_NEITHER 6 7 /* This one is actually meant to be expanded */ 8 #define MUST_EXPAND GO 9 10 /* The following are "preprocessing numbers" and should not trigger macro 11 * expansion. */ 12 1e 13 1OK 14 15 /* These are also "preprocessing numbers", so no expansion */ 16 123e+OK 17 .23E+OK 18 1.3e-OK 19 12.E-OK 20 123p+OK 21 .23P+OK 22 1.3p-OK 23 12.P-OK 24 123..OK 25 .23.OK.OK 26 27 /* Importantly, just before the MUST_EXPAND in each of these, the preceding 28 * "preprocessing number" ends and we have an actual expression. So the 29 * MUST_EXPAND macro must be expanded (who would have though?) in each case. */ 30 123ef+MUST_EXPAND 31 .23E3-MUST_EXPAND 32 1.3e--MUST_EXPAND 33 12.E-&MUST_EXPAND 34 123p+OK+MUST_EXPAND 35 .23P+OK;MUST_EXPAND 36 1.3p-OK-MUST_EXPAND 37 12.P-OK&MUST_EXPAND 38