目录

  1. 什么是预处理指令符?
  2. 预处理指令符的使用
  3. 自定义指令符
  4. 使用Visual Studio快速定义指令符
  5. 定义指令符区域

什么是预处理指令符?

当C#编译器找到一条预处理指令#if,最后找到一条指令时,#endif仅在定义了指定符号的情况下,编译器才会在这些指令之间编译代码。与C和C ++不同,您不能将数字值分配给符号。#if C#中的语句为布尔型,仅测试符号是否已定义。

预处理指令符的使用

  • #if:打开条件编译,仅在定义了指定符号的情况下才编译代码。
  • #elif:根据是否定义了指定的符号,关闭前面的条件编译并打开新的条件编译。
  • #else:如果未定义先前指定的符号,则关闭之前的条件编译并打开新的条件编译。
  • #endif:关闭前面的条件编译。

条件编译(编译器会根据不同配置环境来执行):

#if DEBUG
Console.WriteLine("我是debug 模式!");
#elif RELEASE
Console.WriteLine("我是relsease 模式!");
#else
Console.WriteLine("我是自定义模式!");
#endif
Console.WriteLine("我是没有被任何预处理过得输出!");

当前解决方案编译环境为Debug

输出结果:

常用指令符:

自定义指令符

举例:我们需要两个版本的代码,基础版、更多功能的企业版本。此时我们就可以通过自定义指令符来满足定制化功能。

  • #define 自定义指令符
  • #undef 删除指令符

也可以通过属性的方式来执行方法

使用Visual Studio快速定义指令符

VS站点-》右键-》属性-》生成-》常规

定义生效后,通过csproj工程文件我们可以看到有两条PropertyGroup对应不同的Condition

定义指令符区域

你还可以使用以下两个预处理程序指令定义可以折叠在大纲中的代码区域:

  • #region:开始一个区域。
  • #endregion:结束区域
#region MyClass definition
public class MyClass
{
static void Main()
{
}
}
#endregion

参考链接

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives

https://blog.walterlv.com/post/how-to-define-preprocessor-symbols.html

https://www.cnblogs.com/woxihuadabai/p/8005892.html

.net 预处理指令符的使用的更多相关文章

  1. VC中预处理指令与宏定义详解

    刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具.使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能. 一个 ...

  2. 常用C/C++预处理指令详解

    预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查.预处理命令以符号“#”开头. 常用的预处理指令包括: 宏定义:#define 文件包含:#include 条件编译:#i ...

  3. C语言-1.结构体,2.枚举,3.typedef,4.预处理指令的概念,5.条件编译

    1. 结构体数组 定义:由若干个相同类型的结构体变量组成的有序的集合. 定义格式: 1) 定义结构体的同时定义结构体数组 struct Car{ int lunzi; int speed; }cars ...

  4. 52个有效方法(4) - 多用类型常量,少用#define预处理指令

    局部常量 在实现文件中使用 static const 来定义"只在编译单元内可见的常量"(translation-unit-specific constant).其命名规则为在前面 ...

  5. 多用类型常量,少用#define预处理指令

    摒弃: #define ANIMATION_DURATION 0.3   #define ERROR_MESSAGE @“ErrorMessage” 1)没有常量的类型信息 2)假设此指令声明在某个头 ...

  6. 预处理指令#pragma

    #pragma介绍 #pragma是一个预处理指令,pragma的中文意思是『编译指示』.它不是Objective-C中独有的东西(貌似在C/C++中使用比较多),最开始的设计初衷是为了保证代码在不同 ...

  7. C/C++预处理指令#define,#ifdef,#ifndef,#endif…

    2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...

  8. Effective Objective-C 2.0 — 第四条:多用类型常量,少用#define预处理指令

    第四条:多用类型常量,少用#define预处理指令 使用#define 预处理的坏处:定义出来的常量没有类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生 ...

  9. C#中的预处理指令

    C#中的预处理指令 作为预处理中的一对:#region name ,#endregion可能是大家使用得最多的,我也常用它来进行代码分块,在一个比较长的cs文件中,这么做确实是一件可以让你使代码更清晰 ...

随机推荐

  1. WiFi & QR Code

    WiFi & QR Code https://github.com/bndw/wifi-card https://wifi.dev.bdw.to/ 扫码登录 WIFI:T:WPA;S:free ...

  2. Taro Next

    Taro Next Taro 2.0 https://aotu.io/notes/2020/02/03/taro-next-alpha/index.html Taro Next 的迁移指南 https ...

  3. macOS finder show hidden files

    macOS finder show hidden files 显示 MacOS 上的隐藏文件和文件夹 https://zh.wikihow.com/显示Mac-OS-X上的隐藏文件和文件夹 $ def ...

  4. 埋点 & 数据上报 & 数据异常处理

    埋点 & 数据上报 & 数据异常处理 如何在用户关闭浏览器前面,发送请求 beforeunload unload https://developer.mozilla.org/en-US ...

  5. NGK项目是一个怎样的项目?区块链里算是有前景的吗?

    牛市时,项目被众星捧月,优点被无限放大,缺点无限被掩盖:而当市场开始下行时,之前的赞美则变成了贬低.所以了解项目不能盲目跟风,需要有独立的思考.对于近期引起社区讨论的NGK项目,以它为例,今天就来给大 ...

  6. .Net按模板导出Excel

    最近在项目中遇到需求 需要按照一定的模板导出数据 还是直接上代码 这里贴一部分模板长什么样吧 然后就是代码 大致就是找到模板 复制一份临时文件 然后修改临时文件然后导出数据 代码如下 string a ...

  7. 14_MySQL条件查询

    本节所涉及的sql语句: -- 去除结果集中的重复记录 SELECT job FROM t_emp; SELECT DISTINCT job FROM t_emp; SELECT DISTINCT j ...

  8. Differences between Stack and Heap

    本文转载自Differences between Stack and Heap Stack vs Heap So far we have seen how to declare basic type ...

  9. C#如何防止程序多次运行的技巧(精典)

    一.引言最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,所以这里就记录下来,希望给遇到同样问题的朋友有所参考的,同时也是对自己的一个积累.在介绍具体实现代码之前,我们必须明确解决这个问题的思 ...

  10. 痞子衡嵌入式:自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动. 接着上篇文章 <了解i.M ...