I would appreciate any donations. Wishlist or send e-mail type donations to maekawa AT daemon-systems.org.

Thank you.

__CONCAT(3)                Library Functions Manual                __CONCAT(3)

     __CONCAT, __STRING -- argument substitution

     #include <sys/cdefs.h>

     __CONCAT(x, y);

     const char *

     The __CONCAT macro makes use of the cpp(1) preprocessor to concatenate
     two tokens.  When the macro is expanded, x and y are combined into a
     single token, provided that the result forms a valid token; two tokens
     that together do not form a valid token can not be concatenated.  This is
     known as ``token concatenation'' or ``token pasting''.

     The __STRING() macro uses the conventional `#' preprocessing operator to
     replace the argument x with a string literal.  This is also known as

     The following two printf(3) calls produce the same output:

           #define Net     0x01
           #define BSD     0x02

           #define NetBSD  "NetBSD"

           (void)printf("%s\n", __CONCAT(Net, BSD));
           (void)printf("%s%s\n", __STRING(Net), __STRING(BSD));

     cpp(1), cdefs(3)

     The __CONCAT() and __STRING() macros first appeared in NetBSD 1.3.

     Many small details direct the proper use of the macros.  For example,
     while all leading and trailing whitespace is ignored when __STRING() is
     used, it is undefined whether cpp(1) puts white space between the tokens
     when __CONCAT() is used.  It can be also noted that the C preprocessor
     converts all comments to whitespace before any macros are even
     considered.  The use of either macro is discouraged in complex

     Use of this macro is non-portable; this is part of the implementation
     namespace and should only be used in NetBSD code.

NetBSD 7.1.2                   October 17, 2013                   NetBSD 7.1.2