博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#预处理指令
阅读量:6962 次
发布时间:2019-06-27

本文共 1918 字,大约阅读时间需要 6 分钟。

C#预处理指令基本概念

虽然同C和C++的术语“预处理指令”名称一样,但C#的其实并没有单独的预处理步骤,也就是说在VS等环境中并没有预处理的编译器。

预处理指令能够用于替换源文件中的信息。以#(Sharp)字符和预处理指令名称开头。例如:

#define MAX

习惯于将预处理指令的名称全部设为大写。和C与C++不同的是,C#中的预处理指令的名称后不加数字等。C\C++所支持的宏函数在C#中也是不支持的。

还可以使用#region来设置一个区域,同时也可以通过Visual Studio让代码折叠。往往在#region后加上该区域的名称的字符串,可以实现注释的作用。

#region C#预处理指令#endregion

5个预处理指令

1.#undef

上面我们使用了#define,其实还是有#undef的。那么它又是做什么的呢?

#define MAXstatic void Main(string[] args) { #if (MAX) Console.WriteLine("MAX已经定义了。"); #endif }

 

如果我们Debug程序,就会在控制台看到这样一条:

MAX已经定义了。

 

如果我们Release程序,得到的结果也还是一样的,但是如果在代码开头加上:

#undef MAX

 

再来Debug控制台就不会有消息提示了。

 

2.#if、#else、#elif

如果想要控制台显示MAX没有定义的情况,那就用#else来搭配#if就可以了。

#if (MAX)     Console.WriteLine("MAX已经定义了。");#else Console.WriteLine("MAX还没有定义。"); #endif

或许你在键入#else的时候也看到了#elif,这个自然就是对应的else if了。它们的逻辑和常规的if套装是一样的。

#define MAX#undef MAX#define MIN static void Main(string[] args) { #if (MAX) Console.WriteLine("MAX已经定义了。"); #elif (MIN) Console.WriteLine("MIN已经定义了。"); #else Console.WriteLine("MAX还没有定义。"); #endif Console.ReadLine(); }

 

3.#warning、#error

这两个预处理指令用于抛出异常和错误。

#warning 这是一个强制抛出的异常。

 

这里写图片描述

#error 这是一个强制抛出的错误。

这里写图片描述

4.#line

我们还可以用#line将以下#error这行代码的行数设置为10000行,并将文件名设置为”错误“。

static void Main(string[] args)     {#line 10000 "错误"#error 这是一个强制抛出的错误。  }

 

这里写图片描述

如果我们再添加这样一行代码,则会将行数和文件名恢复为默认的。

#line 10000 "Error"#error 这是一个强制抛出的错误。#line default#warning 这是一个强制抛出的警告。

这里写图片描述

5.#pragma

我们先在Program类前加上这样一行代码,它会引发CS3021错误。

[CLSCompliant(false)]

然后我们在上面这行代码前加入以下这行代码,其作用是禁用warning 3021。那么再次Debug就会发现原本的错误已经不在了。

#pragma warning disable 3021

如果想要在后文中恢复这个CS3021错误,就用restore即可。

#pragma warning restore 3021

以下是完整代码。

#pragma warning disable 3021      [CLSCompliant(false)]      class Program      {                                   static void Main(string[] args) {} } #pragma warning restore 3021 [CLSCompliant(false)] public class OtherProgram { public static void OtherMain() {} }

 

这个预处理指令其实是非常复杂的,在各大百科上已经有了相关介绍,以下是维基百科上的。传送门:。

转载于:https://www.cnblogs.com/NoMasp/p/4444109.html

你可能感兴趣的文章
我的友情链接
查看>>
html生成pdf
查看>>
项目进度管理与项目陈本管理
查看>>
LinearLayout的隐藏与显示
查看>>
Android studio使用自定义的格式化文件或者eclipse的格式文件
查看>>
sublime px dp vw换算rem
查看>>
NYOJ 16 矩形嵌套(动态规划)
查看>>
eclipse导入tomcat 8.0x源码
查看>>
shell脚本——爬取域名一级页面元素并判断其可缓存性
查看>>
Linux平台下代理服务器的实现(squid)
查看>>
简单的tab切换
查看>>
yii中文显示
查看>>
四层和七层负载均衡
查看>>
2016清单
查看>>
从一个多层嵌套循环中直接跳出(先想想自己代码设计的是否合理)
查看>>
linux升级内核
查看>>
安卓仿微信右上角弹出菜单窗口
查看>>
PVS让存储颤抖,系列博文之三:PVS的写缓存新技术之Win7桌面实测篇
查看>>
Java控制车速
查看>>
传入含中文的字符串 返回中文首字母
查看>>