__CONCAT(3) | Library Functions Manual | __CONCAT(3) |
__CONCAT
, __STRING
—
#include <sys/cdefs.h>
xy
__CONCAT
(x,
y);
const char *
__STRING
(x);
__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”.
#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));
__CONCAT
() and __STRING
()
macros first appeared in NetBSD 1.3.
__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.
October 17, 2013 | NetBSD 9.0 |