C#预处理器指令。Unity多平台很有用哦。






常用关键字外,C#还有许多名为"预处理器指令"的命令。这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面。例如,使用预处理器指令可以禁止编译器编译代码的某一部分。如果计划发布两个版本的代码,即基本版本和有更多功能的企业版本,就可以使用这些预处理器指令。在编译软件的基本版本时,使用预处理器指令还可以禁止编译器编译与额外功能相关的代码。另外,在编写提供调试信息的代码时,也可以使用预处理器指令。实际上,在销售软件时,一般不希望编译这部分代码。
预处理器指令的开头都有符号#。

注意:

C++开发人员应知道在C和C++中,预处理器指令是非常重要的,但是,在C#中,并没有那么多的预处理器指令,它们的使用也不太频繁。C#提供了其他机制来实现许多C++指令的功能,例如定制特性。还要注意,C#并没有一个像C++那样的独立预处理器,所谓的预处理器指令实际上是由编译器处理的。尽管如此,C#仍保留了一些预处理器指令,因为这些命令对预处理器有一定的影响。

#define和 #undef

#define的用法如下所示:

#define DEBUG

它告诉编译器存在给定名称的符号,在本例中是DEBUG。这有点类似于声明一个变量,但这个变量并没有真正的值,只是存在而已。这个符号不是实际代码的一部分,而只在编译器编译代码时存在。在C#代码中它没有任何意义。

#undef正好相反-- 删除符号的定义:

#undef DEBUG

如果符号不存在,#undef就没有任何作用。同样,如果符号已经存在,#define也不起作用。

必须把#define和#undef命令放在C#源代码的开头,在声明要编译的任何对象的代码之前。

#define本身并没有什么用,但与其他预处理器指令(特别是#if)结合使用时,它的功能就非常强大了。

注意:

这里应注意一般C#语法的一些变化。预处理器指令不用分号结束,一般一行上只有一个命令。

这是因为对于预处理器指令,C#不再要求命令用分号结束。如果它遇到一个预处理器指令,就会假定下一个命令在下一行上。

 

#if, #elif, #else和#endif

这些指令告诉编译器是否要编译某个代码块。考虑下面的方法:

#if Debug
                Console.WriteLine("#IF预处理器指令");
#else
                Console.WriteLine("#ELSE预处理器指令");
#endif

如果在C#源代码的开头声明了#define Debug则会输出:

#IF预处理器指令

如果是#undef Debug,则输出:

#ELSE预处理器指令

与C++中的情况不同,使用#if不是条件编译代码的唯一方式,C#还通过Conditional特性提供了另一种机制;这里就不多写了,后面再详细学习;

#if和 #elif还支持一组逻辑运算符!、==、!=和 ||。如果符号存在,就被认为是true,否则为false;

例如:

#if Debug && (Enterprise==false)  

 // 如果Debug定义了,但是Enterprise未定义则会编译其中的代码

 

 #warning和 # error

当编译器遇到它们时,会分别产生警告或错误。如果编译器遇到#warning指令,会给用户显示#warning指令后面的文本,之后编译继续进行。如果编译器遇到#error指令,就会给用户显示后面的文本,作为一个编译错误信息,然后会立即退出编译,不会生成IL代码。

使用这两个指令可以检查#define语句是不是做错了什么事,使用#warning语句可以让自己想起做过什么事:

#if DEBUG && RELEASE
#error "You've defined DEBUG and RELEASE simultaneously! "
#endif

#warning "Don't forget to remove this line before the boss tests the code! "
Console.WriteLine("*I hate this job*");

 

#line

#line指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。这个指令用得并不多。如果编写代码时,在把代码发送给编译器前,要使用某些软件包改变键入的代码,就可以使用这个指令,因为这意味着编译器报告的行号或文件名与文件中的行号或编辑的文件名不匹配。#line指令可以用于恢复这种匹配。也可以使用语法#line default把行号恢复为默认的行号

#pragma

#pragma指令可以抑制或恢复指定的编译警告。与命令行选项不同,#pragma指令可以在类或方法上执行,对抑制警告的内容和抑制的时间进行更精细的控制。下面的例子禁止字段使用警告,然后在编译MyClass类后恢复该警告。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值