熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2022-06-13   來源: .NET編程 

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

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

  #define和#undef

  用法

  #define DEBUG

  #undef DEBUG

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

  #define DEBUG

  #undef  DEBUG

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

  #if#elif#else#endif

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

#if DEBUG
   ConsoleWrite(debug);
#elif RELEASE
    ConsoleWrite(realse);
#else
    ConsoleWrite(other);
#endif

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

  #warning#error

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

  參考下面的代碼

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

  #region 和#endregion

  這個兩個用來組成代碼塊

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

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

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

  示例

// preprocessor_linecs
public class MyClass
{
   public static void Main()
   {
      #line
      int i;   // CS on line
      #line default
      char c;   // CS on line
   }
}

  示例

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

// preprocessor_linehiddencs
using System;
class MyClass
{
   public static void Main()
   {
      ConsoleWriteLine(Normal line #);   // Set a break point here
      #line hidden
      ConsoleWriteLine(Hidden line);
      #line default
      ConsoleWriteLine(Normal line #);
   }
}


From:http://tw.wingwit.com/Article/program/net/201311/15246.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.