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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#define ABC \
ggg
ABC
/* Standards */
#define NOTHING
NOTHING
#define SYMBOL symbol
#undef SYMBOL
#define SYMBOL _symbol_
< SYMBOL > // < _symbol_ >
xSYMBOLx // xSYMBOLx
+SYMBOL- // +_symbol_-
>SYMBOL< // >_symbol_<
<SYMBOL> // <_symbol_>
#define FALSE 0
#define TRUE !FALSE
a = x > 0 ? TRUE : FALSE // a = x > 0 ? !0 : 0
#define A x
#define B y
#define MAC(a, b) \
T() { a(); return b; } // T() { x(); return y; }
MAC(A,B);
#ifdef MAC
MAC(X,Y)
#endif // MAC
/* Recursions */
#define y x
#define x y
x // x
#define Test(a) a
#define b Test(b)
a = b; // a = b;
#define func abc(func)
a = func // a = abc(func)
#define func1 func(abc)
a = func1 // a = abc(func)(abc)
#define args(func, args) func args
args(t1, (args(t2, (x, y)))) // t1 (t2 (x, y))
#define ARGS(a) a
#define __ ARGS
int foo __((int x)); // int foo (int x);
/* Concatenations */
#define tail _Test
// Txt_##tail // Txt_##_Test
#define z(e,f) e##_##f
z ( abc, xyz ) // abc_xyz
#define CAT( var ) fix##.var
CAT( a ) // fix.a
#define CAT3( class, ref ) class##ref::class##ref
CAT3( a, b ) // ab::ab
#define CAT2( var ) fix##var::fix##var
CAT2( a ) // fixa::fixa
/* Extremes */
#define MAKE_X( name ) name##_Test
#define MAKE_Y( name ) MAKE_X( name##_Sym )
MAKE_Y( Txt ); // Txt_Sym_Test;
/* Extensions */
/*
#ident "(c)# Test.txt"
#if #machine(i386)
# error illegal machine
#endif
char machine[6];
*/
/* Last bug */
#define Cfstrcpy Cstrcpy
#define Cstrcpy( s1, s2 ) strcpy( s1, s2 )
Cfstrcpy(Par1,Par2 ) // blub( Par1, Par2 )
|