C#预处理器指令

C#有许多名为预处理器指令的命令。这些命令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。例如,预处理器可禁止编译器编译代码的某一部分。如果计划发布两个版本的代码,比如基本版本和企业版本,或者针对不同的.NET Framework版本进行编码,就可以使用这些指令。在Anthem.NET的代码中我们经常可以看到这种用法。

预处理器指令的开头都有符号#。

注意:

C#中并没有一个像C++那样的独立预处理器,所谓的预处理器指令仍由编译器处理。

下面将对这些指令逐一介绍。

1. #define和#undef

#define可以定义符号。当将符号用作传递给#if指令的表达式时,此表达式的计算结果true。如

#define DEBUG

它告诉编译器存在给定名称的符号,在本例中是DEBUG。这个符号不是实际代码的一部分,只在编译代码时存在。

#undef正好相反,它删除一个符号。

必须把#define和#undef命令放在C#源码的开头,即在要编译的任何代码之前。它不像C++中那样可以定义常数值。

#define本身并无大用,它需要配合#if指令使用。

#define DEBUG
int DoSw(double x)
{
#if DEBUG
COnsole.WriteLine("x is"+X);
#edif
}

2. #if, #elif, #else和#endif

这些指令告诉编译器是否要编译某个代码块。看下面的方法:

static void PrintVersion()
  {
    #if V3
      Console.WriteLine("Version 3.0");
    #elif V2
      Console.WriteLine("Version 2.0");
    #else
      Console.WriteLine("Version 1.0");
    #endif
  }

上面的代码会根据定义的符号来打印不同的版本信息。 这种方式成为条件编译。

注意:

使用#if不是条件编译代码的唯一方式,C#还提供了通过Conditional属性的机制。

#if和#elif还支持一组逻辑运算符!=,==,!=和|| 。如果符号存在,符号的值被认为是true,否则为false,如:

#if V3 || (V2 == true) // if 定义了V3或V2符号...

时间: 2024-12-22 00:42:53

C#预处理器指令的相关文章

C#预处理器指令和字符串处理

一.C# 预处理器指令 在C#编程过程中,如果文件中的代码太长那么就不便于阅读,为此,采用C# 预处理器指令#region来处理代码.#region 是 C# 预处理器指令.#region 是一个分块预处理命令,它主要是用于编辑器代码的分块,在编译时会被自动删除. #region 使程序员可以在使用 Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码.使用#region和#endregion,将代码写在两者之间就可以了.   public void Insert(str

using-asp.net 错误 CS1028: 意外的预处理器指令

问题描述 asp.net 错误 CS1028: 意外的预处理器指令 using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI

错误 111 预处理器指令必须作为一行的第一个非空白字符出现

问题描述 functionGetValues(pollutantType){varurl='<%=ResolveUrl("~/Material/Formula/MaterialPara.aspx?PSCode='+pscode+'&Month='+$("#WorkMonth").val()+'&PollutantType=2&OutputCode='+$("#SerialId").val()+'&DataType=2&

详解C/C++预处理器 .

C/C++编译系统编译程序的过程为预处理.编译.链接.预处理器是在程序源文件被编译之前根据预处理指令对程序源文件进行处理的程序.预处理器指令以#号开头标识,末尾不包含分号.预处理命令不是C/C++语言本身的组成部分,不能直接对它们进行编译和链接.C/C++语言的一个重要功能是可以使用预处理指令和具有预处理的功能.C/C++提供的预处理功能主要有文件包含.宏替换.条件编译等.        1.文件包含       预处理指令#include用于包含头文件,有两种形式:#include <xxx.

简介C/C++预处理器的一些工作_C 语言

多么令人愉快的一个问题啊 就在被带到编译器那里之前,预处理器都会对你的源代码瞧上一瞧, 做一些格式化的工作,并执行任何你在源代码里面留给它来执行的指令. 像什么? 好吧,预处理器的指令就被叫做预处理器指令,而他们都以一个#开头. 像 #include 这样? 正确. 每一个被预处理器遇到的 # 命令都会导致在某种方式上对源代码的修改. 让我们来简单的研究研究它们,然后我们就会之后这背后都是怎么运转的了. #include 包含其他库.类.接口等的头文件.预处理器实际上就只是把整个头文件复制到你的

深入理解C预处理器_C 语言

C 预处理器不是编译器的组成部分,是编译过程中一个单独的步骤.C预处理器只是一个文本替换工具,它会指示编译器在实际编译之前完成所需的预处理. 所有的预处理器命令都是以井号(#)开头.它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始. 下表包含所有重要的预处理器指令: 指令 描述 #define 定义宏 #include 包含一个源代码文件 #undef 取消已定义的宏 #ifdef 如果宏已经定义,则返回真 #ifndef 如果宏没有定义,则返回真 #if 如果给定条件为真,则

Delphi7.0 预编译指令说明

  Delphi7.0 预编译指令说明 A.1 使用编译设置对话框  编译器的编译指令是用于指定编译器对项目编译过程的动作和行为.可以通过[Project]->[Options]-> [Complier]选项页进行设置(快捷键:Crtl+Shift+F11),绝大部分的编译环境都可以通过这一对话框进行调 整,他包含了对代码.语法.调试信息等的设置.  1.代码设置(Code Generation) Optimization: 是否优化代码.包括防止变量到CPU寄存器.合并分解表达式.生成中间变

《嵌入式C编程:PIC单片机和C编程技术与应用》一1.4 C预编译指令

本节书摘来自华章出版社<嵌入式C编程:PIC单片机和C编程技术与应用>一书中的第1章,第1.4节,作者 [美]马克·西格斯蒙德(Mark Siegesmund),更多章节内容可以访问"华章计算机"公众号查看 1.4 C预编译指令 预编译是C语言中一个非常有意思的特性.预处理使用工具(预处理器)在编译前先扫描一遍代码,并对代码做出相应的修改从而生成用来编译的代码.预编译指令由#开始,占用一整行.在第3章中将会详细介绍它.在上面的例子中,#include指令将文件(e3.h)的

详解C语言编程中预处理器的用法_C 语言

预处理最大的标志便是大写,虽然这不是标准,但请你在使用的时候大写,为了自己,也为了后人. 预处理器在一般看来,用得最多的还是宏,这里总结一下预处理器的用法. #include <stdio.h> #define MACRO_OF_MINE #ifdef MACRO_OF_MINE #else #endif 上述五个预处理是最常看见的,第一个代表着包含一个头文件,可以理解为没有它很多功能都无法使用,例如C语言并没有把输入输入纳入标准当中,而是使用库函数来提供,所以只有包含了stdio.h这个头文