﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-small-fat-随笔分类-about C++</title><link>http://www.cppblog.com/chgsh8089/category/4081.html</link><description>in fact , I'm not fat..</description><language>zh-cn</language><lastBuildDate>Thu, 22 May 2008 20:02:46 GMT</lastBuildDate><pubDate>Thu, 22 May 2008 20:02:46 GMT</pubDate><ttl>60</ttl><item><title>netbeans中的c++配置</title><link>http://www.cppblog.com/chgsh8089/archive/2007/08/24/30763.html</link><dc:creator>small-fat</dc:creator><author>small-fat</author><pubDate>Fri, 24 Aug 2007 07:20:00 GMT</pubDate><guid>http://www.cppblog.com/chgsh8089/archive/2007/08/24/30763.html</guid><wfw:comment>http://www.cppblog.com/chgsh8089/comments/30763.html</wfw:comment><comments>http://www.cppblog.com/chgsh8089/archive/2007/08/24/30763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chgsh8089/comments/commentRss/30763.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chgsh8089/services/trackbacks/30763.html</trackback:ping><description><![CDATA[<font face=#ce_temp_font#>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://topic.csdn.net/t/20061218/23/5239809.html"><u><font color=#800080><br>http://topic.csdn.net/t/20061218/23/5239809.html</font></u></a></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">先安装</span><span lang=EN-US>netbeans</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US>c++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">插件</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">找到</span><span lang=EN-US>cygwin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，选择</span><span lang=EN-US>devel</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的（视频教程里少了最后两项，按视频教程那样安装再加上最后两项就</span><span lang=EN-US>ok</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了）</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>gcc </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">核心</span><span lang=EN-US>(c</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译器</span><span lang=EN-US>)<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>3.4.x</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>gcc-c++(c++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译器</span><span lang=EN-US>)<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>3.4.x</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>gdb(GUN</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调试器</span><span lang=EN-US>)<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>6.5.50</st1:chsdate></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>make<span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>3.80</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">完后把</span><span lang=EN-US>cygwin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下的</span><span lang=EN-US>bin</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件以及</span><span lang=EN-US>usr</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里的</span><span lang=EN-US>bin(or sbin)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">放到环境变量</span><span lang=EN-US>path</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里去</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">例如：</span><span lang=EN-US>D:\cygwin\bin; D:\cygwin\usr\sbin</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></font></p>
<img src ="http://www.cppblog.com/chgsh8089/aggbug/30763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chgsh8089/" target="_blank">small-fat</a> 2007-08-24 15:20 <a href="http://www.cppblog.com/chgsh8089/archive/2007/08/24/30763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>#define的用法</title><link>http://www.cppblog.com/chgsh8089/archive/2007/04/18/22261.html</link><dc:creator>small-fat</dc:creator><author>small-fat</author><pubDate>Wed, 18 Apr 2007 15:53:00 GMT</pubDate><guid>http://www.cppblog.com/chgsh8089/archive/2007/04/18/22261.html</guid><wfw:comment>http://www.cppblog.com/chgsh8089/comments/22261.html</wfw:comment><comments>http://www.cppblog.com/chgsh8089/archive/2007/04/18/22261.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/chgsh8089/comments/commentRss/22261.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chgsh8089/services/trackbacks/22261.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">转载：<br>&nbsp;&nbsp;&nbsp;<a href="http://folsailor.bokee.com/6156411.html">http://folsailor.bokee.com/6156411.html</a><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><br><span style="COLOR: #000000">#define的用法zz<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>今天整理了一些#define的用法，与大家共享！<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.简单的define定义<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;MAXTIME&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>一个简单的MAXTIME就定义好了，它代表1000，如果在程序里面写<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>这样的定义看起来类似于普通的常量定义CONST，但也有着不同，因为define的定义更像是简单的文本替换，而不是作为一个量来使用，这个问题在下面反映的尤为突出。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.define的&#8220;函数定义&#8221;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>define可以像函数那样接受一些参数，如下<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;max(x,y)&nbsp;(x)</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(y)?(x):(y);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>这个定义就将返回两个数中较大的那个，看到了吗？因为这个&#8220;函数&#8221;没有类型检查，就好像一个函数模板似的，当然，它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>但是这样做的话存在隐患，例子如下：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;Add(a,b)&nbsp;a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>在一般使用的时候是没有问题的，但是如果遇到如：c&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Add(a,b)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;d的时候就会出现问题，代数式的本意是a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b然后去和c，d相乘，但是因为使用了define（它只是一个简单的替换），所以式子实际上变成了<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>c</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;b</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">d<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>另外举一个例子：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;pin&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>pin&nbsp;a,b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>本意是a和b都是int型指针，但是实际上变成int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;a,b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>a是int型指针，而b是int型变量。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>这是应该使用typedef来代替define，这样a和b就都是int型指针了。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>所以我们在定义的时候，养成一个良好的习惯，建议所有的层次都要加括号。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.宏的单行定义<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;A(x)&nbsp;T_##x<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;B（x)&nbsp;#@x<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;C（x)&nbsp;#x<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>我们假设：x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">，则有：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>A(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">------</span><span style="COLOR: #000000">〉T_1<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>B(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">------</span><span style="COLOR: #000000">〉</span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">1'</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">C(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">------</span><span style="COLOR: #000000">〉</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>（这里参考了&nbsp;hustli的文章）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.define的多行定义<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>define可以替代多行的代码，例如MFC中的宏定义（非常的经典，虽然让人看了恶心）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;MACRO(arg1,&nbsp;arg2)&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;{&nbsp;</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">/*</span><span style="COLOR: #000000">&nbsp;declarations&nbsp;</span><span style="COLOR: #000000">*/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>stmt1;&nbsp;</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>stmt2;&nbsp;</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">/*</span><span style="COLOR: #000000">&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;</span><span style="COLOR: #000000">*/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>}&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">/*</span><span style="COLOR: #000000">&nbsp;(no&nbsp;trailing&nbsp;;&nbsp;)&nbsp;</span><span style="COLOR: #000000">*/</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>关键是要在每一个换行的时候加上一个</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>摘抄自http:</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">www.blog.edu.cn</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">user1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">16293</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">archives</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2005</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">115370</span><span style="COLOR: #000000">.shtml&nbsp;修补了几个bug<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.在大规模的开发过程中，特别是跨平台和系统的软件里，define最重要的功能是条件编译。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>就是：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifdef&nbsp;WINDOWS<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><img src="http://www.cppblog.com/Images/dot.gif"><img src="http://www.cppblog.com/Images/dot.gif"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><img src="http://www.cppblog.com/Images/dot.gif"><img src="http://www.cppblog.com/Images/dot.gif"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#endif<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifdef&nbsp;LINUX<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><img src="http://www.cppblog.com/Images/dot.gif"><img src="http://www.cppblog.com/Images/dot.gif"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><img src="http://www.cppblog.com/Images/dot.gif"><img src="http://www.cppblog.com/Images/dot.gif"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#endif<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>可以在编译的时候通过#define设置编译环境<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">.如何定义宏、取消宏<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">定义宏<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;[MacroName]&nbsp;[MacroValue]<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">取消宏<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#undef&nbsp;[MacroName]<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>普通宏<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;PI&nbsp;(</span><span style="COLOR: #000000">3.1415926</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>带参数的宏<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;max(a,b)&nbsp;((a)</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(b)?&nbsp;(a),(b))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>关键是十分容易产生错误，包括机器和人理解上的差异等等。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">.条件编译<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifdef&nbsp;XXX&#8230;(#</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">)&nbsp;&#8230;#endif<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>例如&nbsp;#ifdef&nbsp;DV22_AUX_INPUT<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;AUX_MODE&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;AUY_MODE&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>＃endif<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifndef&nbsp;XXX&nbsp;&#8230;&nbsp;(#</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">)&nbsp;&#8230;&nbsp;#endif<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">.头文件(.h)可以被头文件或C文件包含；<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>重复包含（重复定义）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>由于头文件包含可以嵌套，那么C文件就有可能包含多次同一个头文件，就可能出现重复定义的问题的。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>通过条件编译开关来避免重复包含（重复定义）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>例如<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifndef&nbsp;__headerfileXXX__<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>＃define&nbsp;__headerfileXXX__<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>文件内容<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#endif<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>以上只是我从网络上搜集了一些关于define的一些用法，可能还不全面，而且#define的使用本来也存在这争议，如果你对#define的用法也很有兴趣，可以来参加我们的讨论（点击下面的链接）http:</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">www.dingge.com</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">forum</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">dispbbs.asp?boardID</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">43</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ID</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">6972</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">page</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;#define&nbsp;的注意用法&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>在这里我们讲讲#define的一些误用，因为上一片已经讲了它的主要作用，这篇主要是一些比较常见的宏陷阱。首先轻松一下。如下的一个经典例子。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>using&nbsp;namespace&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>class&nbsp;c<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>};<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;c&nbsp;c1;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;c1.i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;cout</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;竟然让private如此的脆弱，但是却揭示了#define陷阱的根源，它仅仅是代码替换机制而已，除此之外，它什么都不是。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>让我们步入正题，来看看下面的一个定义会产生一个什么样的错误？<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;f&nbsp;(x)&nbsp;((x)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>如果这个是一个函数就没有什么问题<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;f&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x)&nbsp;{&nbsp;return&nbsp;x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>但是这里是define的世界，f(x)只见出现了一个可怕的空格<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>使得使得程序中如果出现了<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>f(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>这个代码，最终就变成了<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)&nbsp;(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)这样一个奇怪的东西，当然这个代码倒是无法通过编译，还是可以检查出来的。算是让我们逃过了一次，下次就没有那么幸运了，让我们继续。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;</span><span style="COLOR: #0000ff">abs</span><span style="COLOR: #000000">(x)&nbsp;x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">?&nbsp;x:</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x&nbsp;(引用自C语言陷阱与缺陷)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>这个代码有什么问题？也许大家也注意到了，我一直在用无数的（）来写#define，不是因为我很喜欢()这个东西，而是当我在进行如下的调用的时候。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">abs</span><span style="COLOR: #000000">(a</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b)&nbsp;</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">呜呼，这将产生什么东西呢？<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>答案是：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>a</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">?&nbsp;a</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b&nbsp;:&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>这个显然不是我们要的结果，因为当a</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0的时候将返回一个</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b，要解决这个问题，我们就要使用()来解决。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#define&nbsp;</span><span style="COLOR: #0000ff">abs</span><span style="COLOR: #000000">(x)&nbsp;(x)</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">?&nbsp;(x):</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(x)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>现在这个代码就可以正常的工作了。只要我们紧记#define是代码替换的机制，不要对它有任何的奢求，就会避免上面的问题。另外，因为宏不是一个类型，没有数据安全检查，在调试的时候也会产生障碍，所以，C</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">就一直提倡使用const和inline来替换#define，也许，#define真的会在历史的舞台上消失，但define在C语言时代留下的功绩却不应该忘记。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>来自&nbsp;http:</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">community.csdn.net</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">Expert</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">topic</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">3195</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">3195102</span><span style="COLOR: #000000">.xml?temp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">3936731</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/chgsh8089/aggbug/22261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chgsh8089/" target="_blank">small-fat</a> 2007-04-18 23:53 <a href="http://www.cppblog.com/chgsh8089/archive/2007/04/18/22261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>