blob: eabd475f6f36da11e0a9522cfee209b367d8dc00 [file] [log] [blame]
/**************************************************************
*
* 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 )
/* ---------------------------------------------------------------------- */