1 /* 2 * Each iteration of the scanning of "SCAN()" re-evaluates the recursive 3 * B->A->B expansion. 4 * 5 * Did I already mention that the C preprocessor language 6 * is a perverse thing? 7 */ 8 9 #define LP ( 10 11 #define A() B LP ) 12 #define B() A LP ) 13 14 #define SCAN(x) x 15 16 A() // B ( ) 17 SCAN( A() ) // A ( ) 18 SCAN(SCAN( A() )) // B ( ) 19 SCAN(SCAN(SCAN( A() ))) // A ( ) 20 /* 21 * check-name: Preprocessor #3 22 * check-description: Sparse used to get this wrong, outputting A third, not B. 23 * check-command: sparse -E $file 24 * 25 * check-output-start 26 27 B ( ) 28 A ( ) 29 B ( ) 30 A ( ) 31 * check-output-end 32 */ 33