- NetBSD Manual Pages
__CONCAT(3) NetBSD Library Functions Manual __CONCAT(3)
Powered by man-cgi (2021-03-02).
Maintained for NetBSD
by Kimmo Suominen.
Based on man-cgi by Panagiotis Christias.
__CONCAT, __STRING -- argument substitution
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 sin-
gle 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));
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 consid-
ered. 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 9.99 October 17, 2013 NetBSD 9.99