C#预处理

简介:    C#定义了多个预处理指令,它们可以改变编译系统解释源程序文件的方式。在把程序翻译为目标代码之前,预处理指令首先对源文件中的文本产生作用,即编译哪些文本。C#中所有的预处理指令都以#开头,并且每个预处理指令都单独占用一行。

   C#定义了多个预处理指令,它们可以改变编译系统解释源程序文件的方式。在把程序翻译为目标代码之前,预处理指令首先对源文件中的文本产生作用,即编译哪些文本。C#中所有的预处理指令都以#开头,并且每个预处理指令都单独占用一行。C#2.0中的预处理指令如下表。

                                    C#预处理指令

image

 

7.2.1 #define指令

 

  1. #define指令用于定义一个称为符号(symbol)的字符序列。#if和#elif指令可以判断某个符合是否已经存在,并据此控制编译过程。#define指令的基本形式如下:

  2. #define symbol

  3. 注意,这里没有以分号结束,因为它不是C#的语句,而是一个预处理指令。#define和symbol之间至少要用一个空格隔开。C#该指令不同于C和C++中的#define指令(C、C++中是用来定义宏的)。

  4. 例如:

  5. #define Windows

 

7.2.2 #if#elif#else#endif指令

 

#if指令的基本形式如下:

  1. #if symbol_expression_1

  2. statement_sequence_1

  3. #elif symbol_expression_2

  4. statement_sequence_2

  5. #else

  6. statement_sequence_n

  7. #endif

 

7.2.2 #if#elif#else#endif指令

 

其中,symbol_expression_i是一个symbol或多个symbol构成的逻辑表达式。如果表达式的值为真,则编译statement_sequence_i,如果所有的symbol_expression都为假,则编译statement_sequence_n

例 P7_5

 

7.2.3 #undef指令

 

  1. #undef指令可以取消之前定义的符号,基本形式如下:

  2. #undef symbol

  3. 例如:

  4. #define SMALL

  5. //这个位置之前SMALL是被定义的


  6. #if SMALL

  7. #undef SMALL

 

7.2.4 #error指令

 

  1. #error指令主要用于调试,它可以迫使编译器停止编译。该指令的基本形式如下:

  2. #error error_message

  3. 其中,error_message是错误信息。例如:

  4. #error An error occurred here!

 

7.2.5 #warning指令

 

  1. #warning类似于#error,不过它产生的是警告消息而不是错误消息。因此,编译过程不会停止。其基本形式如下:

  2. #warning warning_message

 

7.2.6 #line指令

 

  1. #line指令可以为它所在的文件设置行号和文件名。编译过程中如果出现错误或警告就会用到这里的行号和文件名。#line指令的基本形式为:

  2. #line number "filename"

  3. 其中,number是任意的正整数,它用作新行的行号。可选的filename表示一个任意有效的文件标识符,它被用作新的文件名。#line主要用于调试和特殊的应用程序。

  4. #line指令还有两个选秀,一个是default,它根据原来的位置返回行号。其用法为:

  5. #line default

  6. 另一个是hidden,在逐步调试一个程序的时候,hidden选项允许编译器跳过该指令与下一个不包含hidden选项的#line指令之间的行。其用法如下:

  7. #line hidden

 

7.2.7 #region#endregion指令

 

  1. #region和#endregion用于定义一个区域,该区域可以在Visual Studio IDE的大纲视图中被扩展或收缩。其基本形式如下:

  2. #region region_name

  3. //code


  4. #endregion

  5. 其中,region_name用于指定区域的名称

 

7.2.8 #program指令

 

#program指令是C#2.0新增的,它用于给出指令,例如为编译器指定选项。其基本形式如下:

#program option

其中,option是传递给编译器的指令。

在C#2.0中,#program支持两个选项。一个是warning,它用于启用或禁用某个具体的编译器警告。对于的命名如下:

  1. #program warning disable warnings //禁用警告


  2. #program warning restore warnings

 

7.2.8 #program指令

 

  1. 其中,warnings是一个逗号分隔的警告编号列表。例如:

  2. #program warning disable 168 //禁用168号警告


  3. 另一个选项是checksum。它用于为ASP.NET项目生成校验和。其基本形式如下:

  4. #program checksum "filename""{GUID}""check-sum"

  5. 其中,filename是文件名,GUID是与文件名相关的全局唯一标识符,check-sum是一个包含校验和的十六进制数。该字符串必须包含偶数个数字。
相关文章
|
编译器 C#
C#编程-82:编译预处理_
C#编程-82:编译预处理_
189 0
C#编程-82:编译预处理_
|
编译器 C# C++
☀️ 学会编程入门必备 C# 最基础知识介绍(六)——接口、命名空间、预处理指令、正则表达式、异常处理、文件的输入与输出
前言👻 接口(interface)🎉 定义接口: MyInterface.cs 接口继承: InterfaceInheritance.cs C# 命名空间(Namespace)🎈 定义命名空间 using 关键字 嵌套命名空间 C# 预处理器指令🎄 C# 预处理器指令列表 #define 预处理器 条件指令 C# 正则表达式🔔 定义正则表达式 C# 异常处理🎃 语法 C# 中的异常类 异常处理 创建用户自定义异常 抛出对象 C# 文件的输入与输出⛄️ C# I/O 类 FileStream 类 C# 高级文件操作
☀️ 学会编程入门必备 C# 最基础知识介绍(六)——接口、命名空间、预处理指令、正则表达式、异常处理、文件的输入与输出
|
编译器 C#
C#编程-82:编译预处理
C#编程-82:编译预处理
148 0
C#编程-82:编译预处理
|
2月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
184 19
|
3月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
548 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
254 3
|
11月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
845 12
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
482 4
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
234 11

热门文章

最新文章

下一篇
oss云网关配置