| __CONCAT(3) | Library Functions Manual | __CONCAT(3) |
__CONCAT, __STRING
— argument substitution
#include
<sys/cdefs.h>
xy
__CONCAT(x,
y);
const char *
__STRING(x);
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”.
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 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 11.0 |