PageRenderTime 73ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/www.cppreference.com/wiki/preprocessor/define

https://github.com/tsgates/cclookup
#! | 96 lines | 87 code | 9 blank | 0 comment | 0 complexity | ec641b0f7ebbbbe849eb8af79b608328 MD5 | raw file
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
  4. lang="en" dir="ltr">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>preprocessor:define</title>
  8. <meta name="generator" content="DokuWiki" />
  9. <meta name="robots" content="index,follow" />
  10. <meta name="date" content="2010-10-28T18:17:02-0700" />
  11. <meta name="keywords" content="preprocessor,define" />
  12. <link rel="search" type="application/opensearchdescription+xml" href="http://www.cppreference.com/wiki/lib/exe/opensearch.php" title="C++ Reference" />
  13. <link rel="start" href="../../index.html" />
  14. <link rel="contents" href="http://www.cppreference.com/wiki/preprocessor/define?do=index" title="Sitemap" />
  15. <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="http://www.cppreference.com/wiki/feed.php" />
  16. <link rel="alternate" type="application/rss+xml" title="Current Namespace" href="http://www.cppreference.com/wiki/feed.php?mode=list&amp;ns=preprocessor" />
  17. <link rel="alternate" type="text/html" title="Plain HTML" href="http://www.cppreference.com/wiki/_export/xhtml/preprocessor/define" />
  18. <link rel="alternate" type="text/plain" title="Wiki Markup" href="http://www.cppreference.com/wiki/_export/raw/preprocessor/define" />
  19. <link rel="canonical" href="define" />
  20. <link rel="stylesheet" media="screen" type="text/css" href="../lib/exe/css.php@t=custom1&amp;tseed=1289693594" />
  21. <link rel="stylesheet" media="all" type="text/css" href="../lib/exe/css.php@s=all&amp;t=custom1&amp;tseed=1289693594" />
  22. <link rel="stylesheet" media="print" type="text/css" href="../lib/exe/css.php@s=print&amp;t=custom1&amp;tseed=1289693594" />
  23. <script type="text/javascript" ><!--//--><![CDATA[//><!--
  24. var NS='preprocessor';var JSINFO = {"id":"preprocessor:define","namespace":"preprocessor"};
  25. //--><!]]></script>
  26. <script type="text/javascript" charset="utf-8" src="../lib/exe/js.php@tseed=1289693594" ></script>
  27. </head>
  28. <body>
  29. <div class="dokuwiki export">
  30. <h2 class="sectionedit1"><a name="define" id="define">#define</a></h2>
  31. <div class="level2">
  32. <p>
  33. Syntax:
  34. </p>
  35. <pre class="cpp code cpp"> <span class="co2">#define macro-name replacement-string</span></pre>
  36. <p>
  37. The #define command is used to make substitutions throughout the file in which
  38. it is located. In other words, #define causes the compiler to go through the
  39. file, replacing every occurrence of macro-name with replacement-string. The
  40. replacement string stops at the end of the line.
  41. </p>
  42. <p>
  43. Here&#039;s a typical use for a #define (at least in C):
  44. </p>
  45. <pre class="cpp code cpp"> <span class="co2">#define TRUE 1</span>
  46. <span class="co2">#define FALSE 0</span>
  47. ...
  48. <span class="kw4">int</span> done <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
  49. <span class="kw1">while</span><span class="br0">&#40;</span> done <span class="sy3">!</span><span class="sy1">=</span> TRUE <span class="br0">&#41;</span> <span class="br0">&#123;</span>
  50. ...
  51. <span class="br0">&#125;</span></pre>
  52. <p>
  53. Another feature of the #define command is that it can take arguments, making it
  54. rather useful as a pseudo-function creator. Consider the following code:
  55. </p>
  56. <pre class="cpp code cpp"> <span class="co2">#define absolute_value( x ) ( ((x) &lt; 0) ? -(x) : (x) )</span>
  57. ...
  58. <span class="kw4">int</span> num <span class="sy1">=</span> <span class="sy2">-</span><span class="nu0">1</span><span class="sy4">;</span>
  59. <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>
  60. ...
  61. <span class="br0">&#125;</span></pre>
  62. <p>
  63. It&#039;s generally a good idea to use extra parentheses when using complex macros.
  64. Notice that in the above example, the variable “€ is always within its own
  65. set of parentheses. This way, it will be evaluated in whole, before being
  66. compared to 0 or multiplied by -1. Also, the entire macro is surrounded by
  67. parentheses, to prevent it from being contaminated by other code. If you&#039;re not
  68. careful, you run the risk of having the compiler misinterpret your code.
  69. Here is an example of how to use the #define command to create a general
  70. purpose incrementing for loop that prints out the integers 1 through 20:
  71. </p>
  72. <pre class="cpp code cpp"> <span class="co2">#define count_up( v, low, high ) \
  73. for( (v) = (low); (v) &lt;= (high); (v)++ )</span>
  74. &nbsp;
  75. ...
  76. &nbsp;
  77. <span class="kw4">int</span> i<span class="sy4">;</span>
  78. count_up<span class="br0">&#40;</span> i, <span class="nu0">1</span>, <span class="nu0">20</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
  79. <span class="kw3">printf</span><span class="br0">&#40;</span> <span class="st0">&quot;i is %d<span class="es1">\n</span>&quot;</span>, i <span class="br0">&#41;</span><span class="sy4">;</span>
  80. <span class="br0">&#125;</span></pre>
  81. <p>
  82. 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>
  83. </p>
  84. </div>
  85. </div>
  86. </body>
  87. </html>