/* * Each iteration of the scanning of "SCAN()" re-evaluates the recursive * B->A->B expansion. * * Did I already mention that the C preprocessor language * is a perverse thing? */ #define LP ( #define A() B LP ) #define B() A LP ) #define SCAN(x) x A() // B ( ) SCAN( A() ) // A ( ) SCAN(SCAN( A() )) // B ( ) SCAN(SCAN(SCAN( A() ))) // A ( ) /* * check-name: Preprocessor #3 * check-description: Sparse used to get this wrong, outputting A third, not B. * check-command: sparse -E $file * * check-output-start B ( ) A ( ) B ( ) A ( ) * check-output-end */