|Linux & Unix Commands - Search Man Pages
__CONCAT(3) BSD Library Functions Manual __CONCAT(3)
__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 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 argu-
ment 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.
BSD December 16, 2010 BSD
All times are GMT -4. The time now is 07:03 AM.