<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1987-2015 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation.  A copy of
the license is included in the
section entitled "GNU Free Documentation License".

This manual contains no Invariant Sections.  The Front-Cover Texts are
(a) (see below), and the Back-Cover Texts are (b) (see below).

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>The C Preprocessor: Concatenation</title>

<meta name="description" content="The C Preprocessor: Concatenation">
<meta name="keywords" content="The C Preprocessor: Concatenation">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Index-of-Directives.html#Index-of-Directives" rel="index" title="Index of Directives">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Macros.html#Macros" rel="up" title="Macros">
<link href="Variadic-Macros.html#Variadic-Macros" rel="next" title="Variadic Macros">
<link href="Stringification.html#Stringification" rel="prev" title="Stringification">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Concatenation"></a>
<div class="header">
<p>
Next: <a href="Variadic-Macros.html#Variadic-Macros" accesskey="n" rel="next">Variadic Macros</a>, Previous: <a href="Stringification.html#Stringification" accesskey="p" rel="prev">Stringification</a>, Up: <a href="Macros.html#Macros" accesskey="u" rel="up">Macros</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index-of-Directives.html#Index-of-Directives" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Concatenation-1"></a>
<h3 class="section">3.5 Concatenation</h3>
<a name="index-concatenation"></a>
<a name="index-token-pasting"></a>
<a name="index-token-concatenation"></a>
<a name="index-_0023_0023-operator"></a>

<p>It is often useful to merge two tokens into one while expanding macros.
This is called <em>token pasting</em> or <em>token concatenation</em>.  The
&lsquo;<samp>##</samp>&rsquo; preprocessing operator performs token pasting.  When a macro
is expanded, the two tokens on either side of each &lsquo;<samp>##</samp>&rsquo; operator
are combined into a single token, which then replaces the &lsquo;<samp>##</samp>&rsquo; and
the two original tokens in the macro expansion.  Usually both will be
identifiers, or one will be an identifier and the other a preprocessing
number.  When pasted, they make a longer identifier.  This isn&rsquo;t the
only valid case.  It is also possible to concatenate two numbers (or a
number and a name, such as <code>1.5</code> and <code>e3</code>) into a number.
Also, multi-character operators such as <code>+=</code> can be formed by
token pasting.
</p>
<p>However, two tokens that don&rsquo;t together form a valid token cannot be
pasted together.  For example, you cannot concatenate <code>x</code> with
<code>+</code> in either order.  If you try, the preprocessor issues a warning
and emits the two tokens.  Whether it puts white space between the
tokens is undefined.  It is common to find unnecessary uses of &lsquo;<samp>##</samp>&rsquo;
in complex macros.  If you get this warning, it is likely that you can
simply remove the &lsquo;<samp>##</samp>&rsquo;.
</p>
<p>Both the tokens combined by &lsquo;<samp>##</samp>&rsquo; could come from the macro body,
but you could just as well write them as one token in the first place.
Token pasting is most useful when one or both of the tokens comes from a
macro argument.  If either of the tokens next to an &lsquo;<samp>##</samp>&rsquo; is a
parameter name, it is replaced by its actual argument before &lsquo;<samp>##</samp>&rsquo;
executes.  As with stringification, the actual argument is not
macro-expanded first.  If the argument is empty, that &lsquo;<samp>##</samp>&rsquo; has no
effect.
</p>
<p>Keep in mind that the C preprocessor converts comments to whitespace
before macros are even considered.  Therefore, you cannot create a
comment by concatenating &lsquo;<samp>/</samp>&rsquo; and &lsquo;<samp>*</samp>&rsquo;.  You can put as much
whitespace between &lsquo;<samp>##</samp>&rsquo; and its operands as you like, including
comments, and you can put comments in arguments that will be
concatenated.  However, it is an error if &lsquo;<samp>##</samp>&rsquo; appears at either
end of a macro body.
</p>
<p>Consider a C program that interprets named commands.  There probably
needs to be a table of commands, perhaps an array of structures declared
as follows:
</p>
<div class="smallexample">
<pre class="smallexample">struct command
{
  char *name;
  void (*function) (void);
};
</pre><pre class="smallexample">
</pre><pre class="smallexample">struct command commands[] =
{
  { &quot;quit&quot;, quit_command },
  { &quot;help&quot;, help_command },
  &hellip;
};
</pre></div>

<p>It would be cleaner not to have to give each command name twice, once in
the string constant and once in the function name.  A macro which takes the
name of a command as an argument can make this unnecessary.  The string
constant can be created with stringification, and the function name by
concatenating the argument with &lsquo;<samp>_command</samp>&rsquo;.  Here is how it is done:
</p>
<div class="smallexample">
<pre class="smallexample">#define COMMAND(NAME)  { #NAME, NAME ## _command }

struct command commands[] =
{
  COMMAND (quit),
  COMMAND (help),
  &hellip;
};
</pre></div>

<hr>
<div class="header">
<p>
Next: <a href="Variadic-Macros.html#Variadic-Macros" accesskey="n" rel="next">Variadic Macros</a>, Previous: <a href="Stringification.html#Stringification" accesskey="p" rel="prev">Stringification</a>, Up: <a href="Macros.html#Macros" accesskey="u" rel="up">Macros</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index-of-Directives.html#Index-of-Directives" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
