C# 预处理器指令

c#的预处理器用于帮助条件编译,但是不同于C和C++指令,不能用于创建宏定义。

参考:
C# preprocessor directives
Conditional Compilation in Visual Basic
Visual Studio 文档 “项目设计器”->“生成”页 (C#)
C# 编译器选项



声明编译常量

有三种方式可以设置条件编译常量:

设置常量方式常量的作用域
在Visual Studio项目设计器中整个项目
使用命令行编译器时在命令行中(C# 编译器选项编译的整个项目
在代码文件中(#define)代码所在的文件

Visual Studio设置编译常量

项目=>属性=>生成=>常规=>条件编译符号
在这里插入图片描述

勾选“定义 DEBUG 常量”、“定义 TRACE 常量”后会自动定义DEBUG、TRACE编译常量。
其他需要的编译常量可在“条件编译符号”中输入,以“;”分隔。

预定义编译常量

.Net 不同框架自带的预定义编译常量

目标框架符号
.Net FrameworkNET20,NET35,NET40,NET45,NET451,NET452,NET46,NET461,NET462,NET47,NET471,NET472
.NET SandardNETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0
.NET CoreNETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2

预处理器指令

#if、#else、#elif、#endif

c#的#if、#else、#elif的条件语句是布尔值,仅判断是否已定义该符号,支持“==、!=、&&、||、!”等运算符号,例如:

        static void Main(string[] args)
        {
#if DEBUG
            Console.WriteLine("this is debug mode");
#endif

#if (DEBUG == true)
            Console.WriteLine("this is debug mode");
#endif

#if (DEBUG != true)
            Console.WriteLine("this is not debug mode");
#endif
        }

#if必须以#endif指令终止,#if与#endif之间的代码块为条件编译内容。
#else、#elif与#if一起使用,#else后必须是#endif。

一行只能有一个预处理器指令。

#define、#undef

#define用来定义编译常量符号
#define指令不能用来声明常量

常量符号可用于#if、#elif指定编译的条件,还可以使用ConditionalAttribute来执行条件编译。

#undef用来取消定义符号,使定义的编译常量失效。
#define、#undef必须放在文件顶部。

#warning、#error

#warning用来生成 CS1030 第一级编译器警告。

#error用来生成 CS1029 用户定义的错误。

        static void Main(string[] args)
        {
#warning 这是一个自定义的编译警告

#error 这是一个自定义的编译错误

        }

在这里插入图片描述

#line

#line可强制设置行号

        static void Main(string[] args)
        {
            Console.WriteLine("Normal line #1."); 
#line hidden    // 隐藏行,在以下两行设置断点将不会生效
            Console.WriteLine("Hidden line.");
            Console.WriteLine("Hidden line.2");
#line default
            Console.WriteLine("Normal line #2.");

            // 强制下一行号为200,文件名为SpecialFilename
#line 200 "SpecialFilename"
            int i;
            int j;

            // 设为默认的原始行号
#line default
            char c;
            float f;
        }

#region #endregion

用于折叠代码块,在单文件代码量比较多的时候非常有用。

#pragma、#pragma warning、#pragma checksum

#pragma为编译器给出特殊指令以编译它所在的文件。 这些指令必须受编译器支持。不可使用 #pragma 创建自定义处理指令。 Microsoft C# 编译器支持以下两种 #pragma 指令:
#pragma warning
#pragma checksum

语法:

#pragma pragma-name pragma-arguments  

#pragma warning 可以启用或禁用特定警告。
#pragma checksum为源文件生成校验和,以帮助调试校验 ASP.NET 页。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值