unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (NetBSD-6.1.5)
Page:
Section:
Apropos / Subsearch:
optional field

__CONCAT(3)                Library Functions Manual                __CONCAT(3)

NAME
     __CONCAT, __STRING -- argument substitution

SYNOPSIS
     #include <&lt;sys/cdefs.h>&gt;

     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
     cpp(1), cdefs(3)

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.

NetBSD 6.1.5                   December 16, 2010                  NetBSD 6.1.5