预处理指令
这些指令/命令不会转换为可执行代码,但会影响编译html" target="_blank">过程的各个方面;列如,可以让编译器不编译某一部分代码等。
C#中主要的预处理指令
#define和#undef
#define指令定义:
#define DEBUG
它告诉编译器存在DEBUG这个符号;这个符号不是实际代码的一部分,而只是在编译器编译代码时候可能会根据这个符号做条件编译。
#undef定义:
#undef DEBUG
用来移除定义的符号DEBUG。如果不存在这样的标记,#undef指令则不会生效。同样,用#define再次定义一个同名的标记也不会有任何变化。
注意:
#if, #elif, #else和#endif
这些指令告诉编译器是否要编译包含在其中的代码块。例如:
int DoSomeWork(double x) { // do something #if DEBUG Console.WriteLine($"x is {x}"); #endif }
这段代码中的Console.Writeline语句,只有在前面用#define指令定义了符号DEBUG后才会在编译的时候,真正被编译到;
如果编译器没发现DEBUG符号,就会在编译的时候忽略这句代码。
#elif(= else if)和#else指令可以用在#if块中:
#define ENTERPRISE #define W10 // further on in the file #if ENTERPRISE // do something #if W10 // some code that is only relevant to enterprise // edition running on W10 #endif #elif PROFESSIONAL // do something else #else // code for the leaner version #endif
#if和#elif还支持有限的一些逻辑操作符,你可以用使用!,==,!=和||等。
一个标记如果存在,则认为是true,如果没有定义,就认为是false,因此你也可以这样使用:
#if W10 && (ENTERPRISE==false) // if W10 is defined but ENTERPRISE isn't
#warning和#error
当编译器遇到#warning的时候,会产生警告信息;
当编译器遇到#error的时候,会产生错误信息;
class Program { static void Main(string[] args) { #warning this is a warning message which will be shown when compile Console.WriteLine("Hello World!"); #error this is a error message, and will break build } }
编译结果:
Program.cs(10,10): warning CS1030: #warning: 'this is a warning message which will be shown when compile' [/define_warning/define_warning.csproj]
Program.cs(14,8): error CS1029: #error: 'this is a error message, and will break build' [/define_warning/define_warning.csproj]
1 Warning(s)
1 Error(s)
使用这些指令可以检查#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 love this job.*");
#region和#endregion
可以用来标识一段代码,在Visual Studio或其他能够识别的IDE里比较有用。
#region Member Field Declarations int x; double d; Currency balance; #endregion
#line
#line指令可以用来改变编译器输出警告和错误时相应的文件名和行号信息。这个实际中,用的可能会比较少。
主要是在用第三方包的时候,有时候会导致编译器报告的行号或文件名与实际不匹配。
#line可以用于还原这种匹配。
#line 164 "Core.cs" // We happen to know this is line 164 in the file Core.cs, // before the intermediate package mangles it. // later on #line default // restores default line numbering
#pragma
#pragma指令可以用来终止或恢复某个指定编号到编译器警告。
与命令行选项不同,#pragma指令可以在类或方法级别实现。
例如:
class Program { static void Main(string[] args) { int i = 0; Console.WriteLine("Hello World!"); } }
编译是会有warning:
Program.cs(9,17): warning CS0219: The variable 'i' is assigned but its value is never used [/define_warning/define_warning.csproj]
1 Warning(s)
0 Error(s)
从warning信息可以看出是warning CS0219,加入#pragma后就不会有warning了。
#pragma warning disable CS0219 public class Program { static void Main(string[] args) { int i = 0; Console.WriteLine("Hello World!"); } } #pragma warning restore CS0219
注意:warning的代码是区分大小写的,CS2019要大写,如果写成cs2019则没有用。
以上就是c#预处理指令分析的详细内容,更多关于c#预处理指令的资料请关注小牛知识库其它相关文章!
主要内容:C# 中的预处理器指令,#define 预处理器,条件指令预处理指令的作用主要是向编译器发出指令,以便在程序编译开始之前对信息进行一些预处理操作。在 C# 中,预处理器指令均以 开头,并且预处理器指令之前只能出现空格不能出现任何代码。另外,预处理器指令不是语句,因此它们不需要以分号 结尾。 在 C# 中,预处理指令用于帮助条件编译。不同于 C 和 C++ 中的指令,在 C# 中不能使用这些指令来创建宏,而且预处理器指令必须是一行中唯一的代码,不能掺杂其它
预处理指令是一种给编译器的指令,用来在实际的编译开始之前预处理一些信息。 所有的预处理指令都以 # 开始,并且在一行预处理指令中,只有空白字符可以出现在指令之前。预处理指令没有声明,所以他们不需要以分号(;)结尾。 C# 编译器不具有独立的预处理机制;然而,指令执行的时候就像是只有这一条一样。在 C# 中,预处理指令被用来帮助条件编译。不像 C 或 C++ 的指令,他们不能创建宏。一个预处理指令必
本文向大家介绍常用C/C++预处理指令详解,包括了常用C/C++预处理指令详解的使用技巧和注意事项,需要的朋友参考一下 预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。预处理命令以符号“#”开头。 常用的预处理指令包括: 宏定义:#define 文件包含:#include 条件编译:#if、#elif、#ifndef、#ifdef、#endif、#undef
本文向大家介绍C#预处理器指令的用法实例分析,包括了C#预处理器指令的用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#预处理器指令的用法。分享给大家供大家参考。具体用法分析如下: C#预处理器指令是在编译时调用的。预处理器指令(preprocessor directive)告诉C#编译器要编译哪些代码,并指出如何处理特定的错误和警告。C#预处理器指令还可以告诉C#编辑器有关
TJS2 可以对 条件编译表达式 ( 相当于 C 中的 #if 和 #endif 的东西 ) 进行处理。也就是说,可以在脚本(script)被实际执行之前进行处理,依照条件只解释脚本中想要解释的一部分,而对其他部分不进行解释。 件编译表达式的书写风格和 C 中的预处理指令不同,是在哪里都能写的自由风格。并不是像 C 中那样每行只能写一条指令。 @set 指令 @set 指令会对条件编译表达式
本文向大家介绍C#中的预处理器指令详解,包括了C#中的预处理器指令详解的使用技巧和注意事项,需要的朋友参考一下 目录 1. #define 和 #undef 2. #if、#elif、#else 和#endif 3. #warning 和 #error 4. #region 和#endregion 5. #line 6. #pragma C#中有许多名为“预处理器指令”的命令。这些命令从来不会