- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C中的预处理指令
C#预处理器指令
控制流语句中的条件表达式是在运行时求值的。而C#预处理器指令是在编译时调用的。预处理器指令(preprocessor directive)告诉C#编译器要编译哪些代码,并指出如何处理特定的错误和警告。C#预处理器指令还可以告诉C#编辑器有关代码组织的信息。
语言对比:C++ —— 预处理
C和C++风格的语言包含一个预处理器(preprocessor),它是独立于编译器的一个实用程序,用于对代码进行整理,根据特殊的记号来采取 特殊的行动。预处理器指令通常告诉编译器如何编译一个文件中的代码,而并不参与实际的编译过程。与此相反,C#编译器会将预处理器指令作为对源代码执行的 常规词法分析的一部分。其结果就是,C#不支持更高级的预处理器宏,它最多只允许定义常量。事实上,“预编译器”在C++中显得很贴切,但在C#中就属于 用词不当。
每个预处理器指令都以一个#开头,而且必须在一行中写完。换行符(而不是分号)标志着预处理器指令的结束。
表3-4总结了所有预处理器指令。
表3-4 预处理器指令
常规语法结构 示例 #if指令 #if preprocessor-expression
?code
#endif #if CSHARP2 ?
??Console.Clear();
#endif #define指令 #define conditional-symbol #define CSHARP2 #undef指令 #undef conditional-symbol #undef CSHARP2 #error指令 #error preproc-message #error Buggy implementation #warning指令 #warning preproc-message #warning Needs code review #pragma指令 #pragma warning #pragma warning disable
?1030 #line指令 #line org-line new-line #line 467 TicTacToe.cs
...
#line default #line default?? #region指令 #region pre-proc-message
?code #region Methods
?...
#endregio ?
3.9.1 排除和包含代码
或许最常用的预处理器指令就是用于控制什么时候以及如何包含代码的指令。举个例子来说,要使代码能够同时由C# 2.0和之前的C# 1.2版本编译器进行编译,可以使用一个预处理器指令,在遇到1.2编译器的时候,就排除C# 2.0特有的代码。我们的tic-tac-toe例子和代码清单3-52对此进行了演示。
代码清单3-52 遇到C# 1.x编译器的时候排除C# 2.0代码
#if CSHARP2
System.Console.Clear();
#endif 在这个例子中,调用了System.Console.Clear()方法,这是只有2.0 CLI才支持的方法。使用#if和#endif预处理器指令,这一行代码就只有在定义了预处理器符号CSHARP2的前提下才会编译。
预处理器指令的另一个应用是适应不同平台之间的差异,比如用WINDOWS和LINUX #if指令将Windows和Linux特有的API包围起来。开发者经常用这些指令来取代多行注释(/*...*/),因为它们更容易通过定义恰当的符 号或者通过一次搜索/替换来移除。预处理器指令最后一个常见的用途是调试。如果用一个#if DEBUG指令将调试代码包围起来,那么在大多数IDE中,都能在最终的发布版本中移除这些代码。IDE默认将DEBUG符号用于调试编译,将 RELEASE符号用于发布版本。
为了处理else-if条件,可以在#if指令中使用#elif指令,而不是创建两个完全独立的#if块,如代码清单3-53所示。
?
代码清单3-53 使用#if、#elif和#endif指令
#if LINUX
...
#elif WINDOWS
...
#endif
3.9.2 定义预处理器符号
可以采取两种方式来定义预处理器符号。第一种方式是使用#define指令,如代码清单3-54所示。
代码清单3-54 一个#define例子
#define CSHARP2 第二种方式是在为.NET编译的时候使用define选项,如输出3-27所示。
输出3-27
csc.exe /define:CSHARP2 TicTacToe.cs 输出3-28展示了
原创力文档


文档评论(0)