/www.cppreference.com/wiki/preprocessor/define
#! | 96 lines | 87 code | 9 blank | 0 comment | 0 complexity | ec641b0f7ebbbbe849eb8af79b608328 MD5 | raw file
- <!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>preprocessor:define</title>
- <meta name="generator" content="DokuWiki" />
- <meta name="robots" content="index,follow" />
- <meta name="date" content="2010-10-28T18:17:02-0700" />
- <meta name="keywords" content="preprocessor,define" />
- <link rel="search" type="application/opensearchdescription+xml" href="http://www.cppreference.com/wiki/lib/exe/opensearch.php" title="C++ Reference" />
- <link rel="start" href="../../index.html" />
- <link rel="contents" href="http://www.cppreference.com/wiki/preprocessor/define?do=index" title="Sitemap" />
- <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="http://www.cppreference.com/wiki/feed.php" />
- <link rel="alternate" type="application/rss+xml" title="Current Namespace" href="http://www.cppreference.com/wiki/feed.php?mode=list&ns=preprocessor" />
- <link rel="alternate" type="text/html" title="Plain HTML" href="http://www.cppreference.com/wiki/_export/xhtml/preprocessor/define" />
- <link rel="alternate" type="text/plain" title="Wiki Markup" href="http://www.cppreference.com/wiki/_export/raw/preprocessor/define" />
- <link rel="canonical" href="define" />
- <link rel="stylesheet" media="screen" type="text/css" href="../lib/exe/css.php@t=custom1&tseed=1289693594" />
- <link rel="stylesheet" media="all" type="text/css" href="../lib/exe/css.php@s=all&t=custom1&tseed=1289693594" />
- <link rel="stylesheet" media="print" type="text/css" href="../lib/exe/css.php@s=print&t=custom1&tseed=1289693594" />
- <script type="text/javascript" ><!--//--><![CDATA[//><!--
- var NS='preprocessor';var JSINFO = {"id":"preprocessor:define","namespace":"preprocessor"};
- //--><!]]></script>
- <script type="text/javascript" charset="utf-8" src="../lib/exe/js.php@tseed=1289693594" ></script>
- </head>
- <body>
- <div class="dokuwiki export">
- <h2 class="sectionedit1"><a name="define" id="define">#define</a></h2>
- <div class="level2">
- <p>
- Syntax:
- </p>
- <pre class="cpp code cpp"> <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's a typical use for a #define (at least in C):
- </p>
- <pre class="cpp code cpp"> <span class="co2">#define TRUE 1</span>
- <span class="co2">#define FALSE 0</span>
- ...
- <span class="kw4">int</span> done <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
- <span class="kw1">while</span><span class="br0">(</span> done <span class="sy3">!</span><span class="sy1">=</span> TRUE <span class="br0">)</span> <span class="br0">{</span>
- ...
- <span class="br0">}</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="cpp code cpp"> <span class="co2">#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) )</span>
- ...
- <span class="kw4">int</span> num <span class="sy1">=</span> <span class="sy2">-</span><span class="nu0">1</span><span class="sy4">;</span>
- <span class="kw1">while</span><span class="br0">(</span> absolute_value<span class="br0">(</span> num <span class="br0">)</span> <span class="br0">)</span> <span class="br0">{</span>
- ...
- <span class="br0">}</span></pre>
- <p>
- It'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'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="cpp code cpp"> <span class="co2">#define count_up( v, low, high ) \
- for( (v) = (low); (v) <= (high); (v)++ )</span>
-
- ...
-
- <span class="kw4">int</span> i<span class="sy4">;</span>
- count_up<span class="br0">(</span> i, <span class="nu0">1</span>, <span class="nu0">20</span> <span class="br0">)</span> <span class="br0">{</span>
- <span class="kw3">printf</span><span class="br0">(</span> <span class="st0">"i is %d<span class="es1">\n</span>"</span>, i <span class="br0">)</span><span class="sy4">;</span>
- <span class="br0">}</span></pre>
- <p>
- Related topics: <a href="sharp" class="wikilink1" title="preprocessor:sharp"># and ##</a>, <a href="preprocessor_if" class="wikilink1" title="preprocessor:preprocessor_if">#if,...,#endif</a>, <a href="undef" class="wikilink1" title="preprocessor:undef">#undef</a>
- </p>
- </div>
- </div>
- </body>
- </html>