Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.


__CONCAT(3)                Library Functions Manual                __CONCAT(3)

NAME
     __CONCAT, __STRING - argument substitution

SYNOPSIS
     #include <sys/cdefs.h>

     xy
     __CONCAT(x, y);

     const char *
     __STRING(x);

DESCRIPTION
     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
     "stringification".

EXAMPLES
     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));

SEE ALSO
     cpp(1), cdefs(3)

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

CAVEATS
     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
     constructs.

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

NetBSD 10.99                   October 17, 2013                   NetBSD 10.99