100162750.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 139 行 · 第 1/2 页

HTM
139
字号
<p class="2" style="MARGIN: 0cm 0cm 8.15pt 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; }</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这段代码会像往常那样编译,但</span><span lang="EN-US">Console.WriteLine</span><span style="FONT-FAMILY: 宋体">命令被包含在</span><span lang="EN-US">#if</span><span style="FONT-FAMILY: 宋体">子句内。这行代码只有在前面的</span><span lang="EN-US">#define</span><span style="FONT-FAMILY: 宋体">命令定义了符号</span><span lang="EN-US">DEBUG</span><span style="FONT-FAMILY: 宋体">后才执行。当编译器遇到</span><span lang="EN-US">#if</span><span style="FONT-FAMILY: 宋体">语句后,将先检查相关的符号是否存在,如果符号存在,就只编译</span><span lang="EN-US">#if</span><span style="FONT-FAMILY: 宋体">块中的代码。否则,编译器会忽略所有的代码,直到遇到匹配的</span><span lang="EN-US">#endif</span><span style="FONT-FAMILY: 宋体">指令为止。一般是在调试时定义符号</span><span lang="EN-US">DEBUG</span><span style="FONT-FAMILY: 宋体">,把不同的调试相关代码放在</span><span lang="EN-US">#i<span style="LETTER-SPACING: -0.4pt">f</span></span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.4pt">子</span><span style="FONT-FAMILY: 宋体">句中。在完成了调试后,就把</span><span lang="EN-US">#define</span><span style="FONT-FAMILY: 宋体">语句注释掉,所有的调试代码会奇迹般地消失,可执行文件也会变小,最终用户不会被这些调试信息弄糊涂</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">显然,要做更多的测试,确保代码在没有定义</span><span lang="EN-US">DEBUG</span><span style="FONT-FAMILY: 宋体">的情况下也能工作</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。这项技术在</span><span lang="EN-US">C</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">C++</span><span style="FONT-FAMILY: 宋体">编程中非常普通,称为条件编译</span><span lang="EN-US">(conditional compilation)</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="MsoNormal"><span></span><span></span><span lang="EN-US">#elif (=else if)</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">#else</span><span style="FONT-FAMILY: 宋体">指令可以用在</span><span lang="EN-US">#if</span><span style="FONT-FAMILY: 宋体">块中,其含义非常直观,它也可以嵌套</span><span lang="EN-US">#if</span><span style="FONT-FAMILY: 宋体">块:</span></p>
<p class="2" style="MARGIN: 8.15pt 0cm 0pt 21.45pt; TEXT-INDENT: 18.45pt"><span><span lang="EN-US">#define ENTERPRISE</span></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#define W2K</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">// further on in the file</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#if ENTERPRISE</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; // do something</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; #if W2K</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // some code that is only relevant to enterprise</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // edition running on W2K</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; #endif</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#elif PROFESSIONAL</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; // do something else</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#else</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; // code for the leaner version</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#endif</span></p>
<p class="a3" style="MARGIN-TOP: 8.15pt; TEXT-INDENT: 21.45pt"><span style="FONT-FAMILY: 黑体">注意:</span></p>
<p class="a1" style="MARGIN-BOTTOM: 8.15pt; TEXT-INDENT: 21.45pt"><span style="FONT-FAMILY: 楷体_GB2312">与</span><span lang="EN-US">C++</span><span style="FONT-FAMILY: 楷体_GB2312">中的情况不同,使用</span><span lang="EN-US">#if</span><span style="FONT-FAMILY: 楷体_GB2312">不是条件编译代码的惟一方式,</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 楷体_GB2312">还提供了另一种利用</span><span lang="EN-US">Conditional</span><span style="FONT-FAMILY: 楷体_GB2312">特性的机制,详见第</span><span lang="EN-US">10</span><span style="FONT-FAMILY: 楷体_GB2312">章。</span></p>
<p class="MsoNormal"><span lang="EN-US">#if</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US"> #elif</span><span style="FONT-FAMILY: 宋体">还支持一组逻辑运算符</span><span lang="EN-US">!</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">==</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">!=</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US"> ||</span><span style="FONT-FAMILY: 宋体">。如果符号存在,就被认为是</span><span lang="EN-US">true</span><span style="FONT-FAMILY: 宋体">,否则为</span><span lang="EN-US">false</span><span style="FONT-FAMILY: 宋体">,例如:</span></p>
<p class="2" style="MARGIN: 8.15pt 0cm 8.15pt 21.45pt; TEXT-INDENT: 18.45pt"><span><span lang="EN-US">#if W2K &amp;&amp; (ENTERPRISE==false)&nbsp;&nbsp; // if W2K is defined but ENTERPRISE isn't</span></span></p>
<h3 style="MARGIN: 8.15pt 0cm"><span lang="EN-US">2.13.3 &nbsp;#warning</span><span style="FONT-FAMILY: 黑体; LETTER-SPACING: -0.8pt">和</span><span lang="EN-US" style="LETTER-SPACING: -0.8pt"> # </span><span lang="EN-US">error</span></h3>
<p class="MsoNormal"><span></span><span><span style="FONT-FAMILY: 宋体">另外两个非常有用的预处理器指令是</span><span lang="EN-US">#warning</span></span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">#error</span><span style="FONT-FAMILY: 宋体">,当编译器遇到它们时,会分别产生一个警告或错误。如果编译器遇到</span><span lang="EN-US">#warning</span><span style="FONT-FAMILY: 宋体">指令,会给用户显示</span><span lang="EN-US">#warning</span><span style="FONT-FAMILY: 宋体">指令后面的文本,之后编译继续进行。如果编译器遇到</span><span lang="EN-US">#error</span><span style="FONT-FAMILY: 宋体">指令,就会给用户显示后面的文本,作为一个编译错误信息,然后会立即退出编译,不会生成</span><span lang="EN-US">IL</span><span style="FONT-FAMILY: 宋体">代码。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">使用这两个指令可以检查</span><span lang="EN-US">#define</span><span style="FONT-FAMILY: 宋体">语句是不是做错了什么事,使用</span><span lang="EN-US">#warning</span><span style="FONT-FAMILY: 宋体">语句可以让自己想起做过什么事:</span></p>
<p class="2" style="MARGIN: 8.15pt 0cm 0pt 21.45pt; TEXT-INDENT: 18.45pt"><span><span lang="EN-US">#if DEBUG &amp;&amp; RELEASE</span></span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13pt"><span lang="EN-US">&nbsp;&nbsp; #error &quot;You've defined DEBUG and RELEASE simultaneously! &quot;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13pt"><span lang="EN-US">#endif</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13pt"><span lang="EN-US">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13pt"><span lang="EN-US">#warning &quot;Don't forget to remove this line before the boss tests the code! &quot;</span></p>
<p class="2" style="MARGIN: 0cm 0cm 8.15pt 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; Console.WriteLine(&quot;*I hate this job*&quot;);</span></p>
<h3 style="MARGIN: 8.15pt 0cm"><span lang="EN-US">2.13.4 &nbsp;#region</span><span style="FONT-FAMILY: 黑体">和</span><span lang="EN-US">#endregion</span></h3>
<p class="MsoNormal"><span></span><span lang="EN-US">#region</span><span style="FONT-FAMILY: 宋体">和</span> <span></span><span lang="EN-US">#endregion</span><span style="FONT-FAMILY: 宋体">指令用于把一段代码标记为有给定名称的一个块,如下所示。</span></p>
<p class="2" style="MARGIN: 8.15pt 0cm 0pt 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#region Member Field Declarations</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; int x;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; double d;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; Currency balance;</span></p>
<p class="2" style="MARGIN: 0cm 0cm 8.15pt 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#endregion</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这看起来似乎没有什么用,它不影响编译过程。这些指令的优点是它们可以被某些编辑器所识别,包括</span><span lang="EN-US">Visual Studio .NET</span><span style="FONT-FAMILY: 宋体">编辑器。这些编辑器可以使用这些指令使代码在屏幕上更好地布局。第</span><span lang="EN-US">12</span><span style="FONT-FAMILY: 宋体">章介绍</span><span lang="EN-US">Visual Studio .NET</span><span style="FONT-FAMILY: 宋体">时会详细介绍它们。</span></p>
<h3 style="MARGIN: 8.15pt 0cm"><span><span lang="EN-US">2.13.5 &nbsp;#line</span></span></h3>
<p class="MsoNormal" style="LINE-HEIGHT: 15pt"><span><span lang="EN-US">#line</span></span><span style="FONT-FAMILY: 宋体">指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。这个指令用得并不多。如果编写代码时,在把代码发送给编译器前,要使用某些软件包改变键入的代码,就可以使用这个指令,因为这意味着编译器报告的行号或文件名与文件中的行号或编辑的文件名不匹配。</span><span lang="EN-US">#line</span><span style="FONT-FAMILY: 宋体">指令可以用于恢复这种匹配。也可以使用语法</span><span lang="EN-US">#line default</span><span style="FONT-FAMILY: 宋体">把行号恢复为默认的行号:</span></p>
<p class="2" style="MARGIN: 8.15pt 0cm 0pt 21.45pt; TEXT-INDENT: 18.45pt"><span lang="EN-US">#line 164 &quot;Core.cs&quot;&nbsp;&nbsp; // we happen to know this is line 164 in the file</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13.5pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Core.cs, before the intermediate</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13.5pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // package mangles it.</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13.5pt"><span lang="EN-US">&nbsp;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13.5pt"><span lang="EN-US">// later on</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13.5pt"><span lang="EN-US">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; TEXT-INDENT: 18.45pt; LINE-HEIGHT: 13.5pt"><span lang="EN-US">#line default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // restores default line numbering</span></p></div>
                <!-- page -->
                <div class="page" style="text-align: center">
                    <a href="100162749.htm">上一页</a>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<a href="100162751.htm">下一页</a>
                </div>
                <div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
                    <div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
                        图书导读
                    </div>
                    <div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
                        <!--导读-->
                        <h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100162750.htm'><font color='red'>2.13  C#预处理器指令</font></a></h1>
                        <div id="divRealteNod2" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100162747.htm'>2.10  有关编译C#文件的更多内容</a></div><div style='float:right;width:49%'>·<a href='100162748.htm'>2.11  控制台I/O</a></div><div style='float:left;width:49%'>·<a href='100162749.htm'>2.12  使用注释</a></div><div style='float:right;width:49%'>·<a href='100162751.htm'>2.14  C#编程规则</a></div><div style='float:left;width:49%'>·<a href='100162752.htm'>2.15  小结</a></div><div style='float:right;width:49%'>·<a href='100165324.htm'>目录</a></div></div>
                    </div>
                </div>
                </div>
        </div>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?