/************************************************************** * * 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_> #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 ) /* ---------------------------------------------------------------------- */