mingw-5.1.4/win32/include/symcat.h
changeset 0 76b1f169d9fe
equal deleted inserted replaced
-1:000000000000 0:76b1f169d9fe
       
     1 /* Symbol concatenation utilities.
       
     2 
       
     3    Copyright (C) 1998, 2000 Free Software Foundation, Inc.
       
     4 
       
     5    This program is free software; you can redistribute it and/or modify
       
     6    it under the terms of the GNU General Public License as published by
       
     7    the Free Software Foundation; either version 2 of the License, or
       
     8    (at your option) any later version.
       
     9 
       
    10    This program is distributed in the hope that it will be useful,
       
    11    but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    13    GNU General Public License for more details.
       
    14  
       
    15    You should have received a copy of the GNU General Public License along
       
    16    with this program; if not, write to the Free Software Foundation, Inc.,
       
    17    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
       
    18 
       
    19 #ifndef SYM_CAT_H
       
    20 #define SYM_CAT_H
       
    21 
       
    22 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
       
    23 #define CONCAT2(a,b)	 a##b
       
    24 #define CONCAT3(a,b,c)	 a##b##c
       
    25 #define CONCAT4(a,b,c,d) a##b##c##d
       
    26 #define STRINGX(s) #s
       
    27 #else
       
    28 /* Note one should never pass extra whitespace to the CONCATn macros,
       
    29    e.g. CONCAT2(foo, bar) because traditonal C will keep the space between
       
    30    the two labels instead of concatenating them.  Instead, make sure to
       
    31    write CONCAT2(foo,bar).  */
       
    32 #define CONCAT2(a,b)	 a/**/b
       
    33 #define CONCAT3(a,b,c)	 a/**/b/**/c
       
    34 #define CONCAT4(a,b,c,d) a/**/b/**/c/**/d
       
    35 #define STRINGX(s) "s"
       
    36 #endif
       
    37 
       
    38 #define XCONCAT2(a,b)     CONCAT2(a,b)
       
    39 #define XCONCAT3(a,b,c)   CONCAT3(a,b,c)
       
    40 #define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d)
       
    41 
       
    42 /* Note the layer of indirection here is typically used to allow
       
    43    stringification of the expansion of macros.  I.e. "#define foo
       
    44    bar", "XSTRING(foo)", to yield "bar".  Be aware that this only
       
    45    works for __STDC__, not for traditional C which will still resolve
       
    46    to "foo".  */
       
    47 #define XSTRING(s) STRINGX(s) 
       
    48 
       
    49 #endif /* SYM_CAT_H */