File: preprocessor3.c

package info (click to toggle)
sparse 0.4.1-1
  • links: PTS, VCS
  • area: non-free
  • in suites: lenny
  • size: 1,268 kB
  • ctags: 2,691
  • sloc: ansic: 23,892; perl: 204; sh: 181; makefile: 174
file content (32 lines) | stat: -rw-r--r-- 614 bytes parent folder | download | duplicates (10)
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
 */