<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
 lang="en" dir="ltr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>
    #define    [C++ Reference]
  </title>

  <meta name="generator" content="DokuWiki Release 2009-12-25c &quot;Lemming&quot;" />
<meta name="robots" content="index,follow" />
<meta name="date" content="2010-01-22T13:55:53-0800" />
<meta name="keywords" content="preprocessor,define" />
<link rel="search" type="application/opensearchdescription+xml" href="/wiki/lib/exe/opensearch.php" title="C++ Reference" />
<link rel="start" href="/wiki/" />
<link rel="contents" href="/wiki/preprocessor/define?do=index" title="Index" />
<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/wiki/feed.php" />
<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/wiki/feed.php?mode=list&amp;ns=preprocessor" />
<link rel="edit" title="Edit this page" href="/wiki/preprocessor/define?do=edit" />
<link rel="alternate" type="text/html" title="Plain HTML" href="/wiki/_export/xhtml/preprocessor/define" />
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/wiki/_export/raw/preprocessor/define" />
<link rel="canonical" href="http://www.cppreference.com/wiki/preprocessor/define" />
<link rel="stylesheet" media="all" type="text/css" href="/wiki/lib/exe/css.php?s=all&amp;t=custom1&amp;tseed=1272971091" />
<link rel="stylesheet" media="screen" type="text/css" href="/wiki/lib/exe/css.php?t=custom1&amp;tseed=1272971091" />
<link rel="stylesheet" media="print" type="text/css" href="/wiki/lib/exe/css.php?s=print&amp;t=custom1&amp;tseed=1272971091" />
<script type="text/javascript" charset="utf-8" ><!--//--><![CDATA[//><!--
var NS='preprocessor';var JSINFO = {"id":"preprocessor:define","namespace":"preprocessor"};
//--><!]]></script>
<script type="text/javascript" charset="utf-8" src="/wiki/lib/exe/js.php?tseed=1272971091" ></script>

  <link rel="shortcut icon" href="/wiki/lib/tpl/custom1/images/favicon.png" />

  </head>

<body>
<div class="dokuwiki">
  
  <div class="stylehead">

    <div class="breadcrumbs">
      <span class="bchead">You are here: </span><a href="../start.html"  title="start">C++ Reference</a> &raquo; <a href="../preprocessor/start.html"  title="preprocessor:start">Preprocessor Commands</a> &raquo; <a href="../preprocessor/define.html"  title="preprocessor:define">#define</a>    </div>
    
  </div>


  
  
  <div class="page">

    <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2828341-1";
urchinTracker();
</script>
    <!-- wikipage start -->
    


<h2><a name="define" id="define">#define</a></h2>
<div class="level2">

<p>

Syntax:

</p>
<pre class="c code c++" style="font-family:monospace;">    <span class="co2">#define macro-name replacement-string</span></pre>
<p>
The #define command is used to make substitutions throughout the file in which
it is located. In other words, #define causes the compiler to go through the
file, replacing every occurrence of macro-name with replacement-string. The
replacement string stops at the end of the line.
</p>

<p>
Here&#039;s a typical use for a #define (at least in C):

</p>
<pre class="c code c++" style="font-family:monospace;">     <span class="co2">#define TRUE 1</span>
     <span class="co2">#define FALSE 0</span>
     ...
     <span class="kw4">int</span> done <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
     <span class="kw1">while</span><span class="br0">&#40;</span> done <span class="sy0">!=</span> TRUE <span class="br0">&#41;</span> <span class="br0">&#123;</span>
        ...
     <span class="br0">&#125;</span></pre>
<p>
Another feature of the #define command is that it can take arguments, making it
rather useful as a pseudo-function creator. Consider the following code:

</p>
<pre class="c code c++" style="font-family:monospace;">     <span class="co2">#define absolute_value( x ) ( ((x) &lt; 0) ? -(x) : (x) )</span>
     ...
     <span class="kw4">int</span> num <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">;</span>
     <span class="kw1">while</span><span class="br0">&#40;</span> absolute_value<span class="br0">&#40;</span> num <span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
        ...
     <span class="br0">&#125;</span></pre>
<p>
It&#039;s generally a good idea to use extra parentheses when using complex macros.
Notice that in the above example, the variable “x” is always within its own
set of parentheses. This way, it will be evaluated in whole, before being
compared to 0 or multiplied by -1. Also, the entire macro is surrounded by
parentheses, to prevent it from being contaminated by other code. If you&#039;re not
careful, you run the risk of having the compiler misinterpret your code.
Here is an example of how to use the #define command to create a general
purpose incrementing for loop that prints out the integers 1 through 20:

</p>
<pre class="c code c++" style="font-family:monospace;">   <span class="co2">#define count_up( v, low, high ) \
     for( (v) = (low); (v) &lt;= (high); (v)++ )</span>
&nbsp;
   ...
&nbsp;
   <span class="kw4">int</span> i<span class="sy0">;</span>
   count_up<span class="br0">&#40;</span> i<span class="sy0">,</span> 1<span class="sy0">,</span> 20 <span class="br0">&#41;</span> <span class="br0">&#123;</span>
     <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span> <span class="st0">&quot;i is %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> i <span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span></pre>
<p>
Related topics: <a href="../preprocessor/sharp.html" class="wikilink1" title="preprocessor:sharp"># and ##</a>, <a href="../preprocessor/preprocessor_if.html" class="wikilink1" title="preprocessor:preprocessor_if">#if,...,#endif</a>, <a href="../preprocessor/undef.html" class="wikilink1" title="preprocessor:undef">#undef</a>
</p>

</div>

    <!-- wikipage stop -->
  </div>

  <div class="clearer">&nbsp;</div>

  
  <div class="stylefoot">

    <div class="meta">
      <div class="user">
              </div>
      <!--
      <div class="doc">
        preprocessor/define.txt &middot; Last modified: 01/22/2010 13:55 by 129.57.114.97      </div>
      -->
    </div>

   
    </div></div></body>
</html>