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
|
/*
* 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
*/
|