]> Zhao Yanbai Git Server - minix.git/commitdiff
cdefs.h: Allow __CONCAT() macro to be nested
authorArun Thomas <arun@minix3.org>
Mon, 30 Aug 2010 14:34:58 +0000 (14:34 +0000)
committerArun Thomas <arun@minix3.org>
Mon, 30 Aug 2010 14:34:58 +0000 (14:34 +0000)
include/sys/cdefs.h

index c982b3307496ee7e2fce65e6a88afc9633c12d85..f030bbce12fd6737aff91dcf12b047f98bc09997 100644 (file)
 /*
  * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
  * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
- * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
- * in between its arguments.  __CONCAT can also concatenate double-quoted
- * strings produced by the __STRING macro, but this only works with ANSI C.
+ * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
+ * mode -- there must be no spaces between its arguments, and for nested
+ * __CONCAT's, all the __CONCAT's must be at the left.  __CONCAT can also
+ * concatenate double-quoted strings produced by the __STRING macro, but
+ * this only works with ANSI C.
  */
 
 #define        ___STRING(x)    __STRING(x)
@@ -88,7 +90,8 @@
 
 #if __STDC__ || defined(__cplusplus)
 #define        __P(protos)     protos          /* full-blown ANSI C */
-#define        __CONCAT(x,y)   x ## y
+#define        __CONCAT1(x,y)  x ## y
+#define        __CONCAT(x,y)   __CONCAT1(x,y)
 #define        __STRING(x)     #x
 
 #define        __const         const           /* define reserved names to standard */