| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #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); |
| |
| /* Concatinations ---------------------------------------------------------- */ |
| |
| #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 |
| |
| /* Extrems ----------------------------------------------------------------- */ |
| |
| #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 ) |
| |
| /* ---------------------------------------------------------------------- */ |