目录

  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. Redis all in one

    Redis all in one Redis: REmote DIctionary Server https://redis.io/topics/quickstart Download, extrac ...

  2. taro table component

    taro table component https://juejin.im/post/5d901696f265da5b926bbcaa https://taro-ext.jd.com/search? ...

  3. js in depth: arrow function & prototype & this & constructor

    js in depth: arrow function & prototype & this & constructor https://developer.mozilla.o ...

  4. VS Code使用Git可视化管理源代码详细教程

    前言: 随着VS Code的功能和插件的不断强大和完善,它已经成为了我们日常开发中一个必不可缺的伙伴了.在之前我曾经写过一篇SourceTree使用教程详解(一个git可视化管理神器,想要了解的话可以 ...

  5. C++算法代码——笨小猴

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1163 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了 ...

  6. Spring中的@Enable注解

    本文转载自SpringBoot中神奇的@Enable注解? 导语 在SpringBoot开发过程,我们经常会遇到@Enable开始的好多注解,比如@EnableEurekaServer.@Enable ...

  7. java基础第11期——Stream流、方法引用、junit单元测试

    1.Stream流 Stream流与io流是不同的东西,用于解决集合类库已有的弊端, 1.1 获取Stream流: Collection集合的Stream方法,注意Map集合要经过转化 default ...

  8. 微信小程序:如何实现两个按钮在最右侧并排

    要实现的效果: wxml端代码: <view  class="prepare_param">                         <view clas ...

  9. COM技术中的VARIANT and VARIANTARG

    VARIANT and VARIANTARG Use VARIANTARG to describe arguments passed within DISPPARAMS, and VARIANT to ...

  10. 5G时代,为什么NoSQL和SQL存在短板?

    01 介绍 当今的通信服务提供商(CSP)需要能够在处理海量复杂的数据的同时,不会下降或者减慢网路响应速度和可靠性.5G时代,设备和用户数量呈指数级增长,这对业务支持服务(BSS)提出了新需求,也成为 ...