鍍金池/ 教程/ C#/ C#預(yù)處理指令
C#屬性(Properties)
C#與Java比較
C#方法
C#枚舉
C#關(guān)鍵字
C# StreamReader類(lèi)
C#不安全代碼
C#文件(I/O)
C#匿名方法
C#線程同步
C# Thread類(lèi)
C#主線程
C#數(shù)據(jù)類(lèi)型
C# FileStream類(lèi)
C#預(yù)處理指令
C#繼承
C#循環(huán)
C#決策結(jié)構(gòu)
C#集合
C#反射
C#類(lèi)型轉(zhuǎn)換
C#泛型
C# StringReader類(lèi)
C#歷史
C#運(yùn)算符重載
C#屬性
C#線程實(shí)例:Sleep()方法
C#線程示例:優(yōu)先級(jí)
C#線程實(shí)例:Join()方法
C# BinaryReader類(lèi)
C#類(lèi)
C#索引器
C# BinaryWriter類(lèi)
C#序列化
C#常量和文字
C#程序結(jié)構(gòu)
C#封裝
C#事件
C#可空類(lèi)型(nullable)
C#基本語(yǔ)法
C#異常處理
C#教程
C#接口
C# System.IO命名空間
C#線程命名實(shí)例
C# StringWriter類(lèi)
C#線程實(shí)例
C#數(shù)組
C#正則表達(dá)式
C#命名空間
C#反序列化
C#與C++比較
C# TextWriter類(lèi)
C#多線程
C#字符串
C#是什么?
C#變量
C# FileInfo類(lèi)
C#線程實(shí)例:Abort()方法
C#結(jié)構(gòu)體
C#運(yùn)算符
C#入門(mén)程序
C#多線程生命周期
C# TextReader類(lèi)
C# DirectoryInfo類(lèi)
C#委托

C#預(yù)處理指令

預(yù)處理器指令用來(lái)在編譯開(kāi)始之前給編譯器指示預(yù)處理信息。

所有預(yù)處理程序指令以符號(hào)#開(kāi)頭,并且只有空格字符在一行上,空格符可預(yù)處理器指令之前出現(xiàn)。 預(yù)處理器指令不是語(yǔ)句,所以它們不以分號(hào)(;)結(jié)尾。

C# 編譯器沒(méi)有分隔預(yù)處理器;,指令被處理為只有一個(gè)。 在 C# 中,預(yù)處理指令用于指示條件編譯。與C語(yǔ)言和C++指令不同,它們不用于創(chuàng)建宏。 預(yù)處理程序指令必須是一行中的唯一指令。

C# 預(yù)處理器指令

下表列出了 C# 中提供的預(yù)處理指令:

預(yù)處理指令 描述
#define 定義一個(gè)叫作符號(hào)的字符序列。
#undef 用于取消定義的符號(hào)。
#if 用來(lái)測(cè)試符號(hào)以查看它們是否為真。
#else 用來(lái)與#if來(lái)創(chuàng)建一個(gè)復(fù)合條件指令。
#elif 用來(lái)創(chuàng)建一個(gè)復(fù)合條件指令。
#endif 指定條件指令的結(jié)束。
#line 用于修改編譯器的行號(hào)和(可選)修改錯(cuò)誤和警告的文件名輸出。
#error 用于從代碼中的特定位置生成錯(cuò)誤。
#warning 用于從代碼中的特定位置生成一級(jí)警告。
#region 允許您在使用Visual Studio代碼編輯器的概述功能時(shí)指定可以展開(kāi)或折疊的代碼塊。
#endregion 用于標(biāo)志著#region塊的結(jié)束。

#define預(yù)處理程序

#define預(yù)處理程序指令創(chuàng)建符號(hào)常量。
#define允許定義一個(gè)符號(hào),通過(guò)使用該符號(hào)作為傳遞給#if指令的表達(dá)式,表達(dá)式的計(jì)算結(jié)果為true。其語(yǔ)法如下:

#define symbol

以下程序演示如何使用#define指令:

#define PI 
using System;
namespace PreprocessorDAppl
{
   class Program
   {
      static void Main(string[] args)
      {
         #if (PI)
            Console.WriteLine("PI is defined");
         #else
            Console.WriteLine("PI is not defined");
         #endif
         Console.ReadKey();
      }
   }
}

當(dāng)編譯和執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果:

PI is defined

條件指令

可以使用#if指令創(chuàng)建條件指令。條件指令用于測(cè)試符號(hào)檢查它們的值是否為真。 如果它們?cè)u(píng)估求值為true,編譯器將評(píng)估求值#if到下一個(gè)指令之間的所有代碼。

條件指令的語(yǔ)法是:

#if symbol [operator symbol]...

其中,符號(hào)(symbol)是要測(cè)試的符號(hào)的名稱。也可以使用布爾值:truefalse,或者使用否定運(yùn)算符加到符號(hào)的前面。

運(yùn)算符符號(hào)是用于評(píng)估符號(hào)的運(yùn)算符。運(yùn)算符可以是以下任一項(xiàng):

  • ==(相等)
  • !=(不等式)
  • &&(和)
  • || (或)

也可以使用括號(hào)對(duì)符號(hào)和運(yùn)算符進(jìn)行分組。在用于編譯調(diào)試版本的代碼或編譯特定配置時(shí)可使用條件指令。 以#if指令開(kāi)頭的條件指令必須明確地使用#endif指令終止。

以下程序演示了條件指令的用法:

#define DEBUG
#define VC_V10
using System;
public class TestClass
{
   public static void Main()
   {
      #if (DEBUG && !VC_V10)
         Console.WriteLine("DEBUG is defined");
      #elif (!DEBUG && VC_V10)
         Console.WriteLine("VC_V10 is defined");
      #elif (DEBUG && VC_V10)
         Console.WriteLine("DEBUG and VC_V10 are defined");
      #else
         Console.WriteLine("DEBUG and VC_V10 are not defined");
      #endif
      Console.ReadKey();
   }
}

當(dāng)編譯和執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果:

DEBUG and VC_V10 are defined