程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#必備知識之預編譯指令

C#必備知識之預編譯指令

編輯:關於C#

預編譯又稱為預處理,是做些代碼文本的替換工作。處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等,就是為編譯做的預備工作的階段,主要處理#開始的預編譯指令。

下面對C#中的預編譯指令進行介紹:

1.#define和#undef

用法:

#define DEBUG

#undef DEBUG

#define告訴編譯器,我定義了一個DEBUG的一個符號,他類似一個變量,但是它沒有具體的值,可以將它看為一個符號而已。#undef就是刪除這個符號的定義。如果符號DEBUG沒定義過,則#undef不起作用,否則#define不起作用。二者都必須放在源代碼之前。二者的順序看代碼的順序:

#define DEBUG

#undef DEBUG

這樣的話,DEBUG是沒有定義的,如果二者換個順序,編譯器就認為DEBUG被定義了

2.#if、#elif、#else、#endif

這個告訴編譯器進行編譯代碼的流程控制。考慮下面代碼:

#if DEBUG
  Console.Write("debug");
#elif RELEASE
  Console.Write("realse");
#else
  Console.Write("other");
#endif

以上代碼就是說如果定義了DEBUG則輸出debug,定義了RELEASE,則輸出realse,否則輸出other。如果定義了DEBUG和REALSE會怎麼樣呢?各位可以自己試一下。

3.#warning、#error

通過這兩個指定可以告訴編譯器,出一個警告還是錯誤信息。除了錯誤信息以後,編譯將停止。

參考下面的代碼:

#if DEBUG           ------〉該DEBUG如果選中當前狀態為DEBUG,則這個默認為#define
  #warning “現在是Ddbug狀態”
#elif RELEASE         ------〉如果選中release狀態的話,這個確沒有默認,不知道我試驗的對不對
  #warning “現在是Realse狀態”
#else
  #error“並清楚什麼狀態”
#endif

4.#region 和#endregion

這個兩個用來組成代碼塊

5.#line (這個指定的使用不太明白,參考MSDN)

這個指令可以改jian變編譯器在警告和錯誤信息中顯示的文件名和行號信息,用#line default把行號恢復為默認的行號。

下面的示例說明如何報告與行號關聯的兩個警告。#line 200 指令迫使行號為 200(盡管默認值為 #7)。另一行 (#9) 作為默認 #line 指令 的結果跟在通常序列後。

示例1:

// preprocessor_line.cs
public class MyClass2
{
  public static void Main()
  {
   #line 200
   int i;  // CS0168 on line 200
   #line default
   char c;  // CS0168 on line 9
  }
}

示例2:

下面的示例說明調試器如何忽略代碼中的隱藏行。運行此示例時,它將顯示三行文本。但是,當設置如示例所示的斷點並按 F10 鍵逐句通過代碼時,您將看到調試器忽略了隱藏行。另請注意,即使在隱藏行上設置斷點,調試器仍會忽略它。

// preprocessor_linehidden.cs
using System;
class MyClass
{
  public static void Main()
  {
   Console.WriteLine("Normal line #1.");  // Set a break point here.
   #line hidden
   Console.WriteLine("Hidden line.");
   #line default
   Console.WriteLine("Normal line #2.");
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved