blob: 71b9acdef0414af10e2fa90f4f9126e3da1a958a (
plain)
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
33
34
35
36
37
|
/*
* We get this one wrong too.
*
* It should result in a sequence
*
* B ( )
* A ( )
* B ( )
* A ( )
*
* because each iteration of the scanning of "SCAN()"
* should re-evaluate the recursive B->A->B expansion.
* But we never re-evaluate something that we noticed
* was recursive. So we will cause it to evaluate to
*
* B ( )
* A ( )
* A ( )
* A ( )
*
* Which is really quite wrong.
*
* 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 ( )
|