__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));
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.