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