c#的預處理器指令很容易識別,你看到了#,就能認出它們。
它和其他的命令有什麼區別呢?
區別在於這些命令從來不會轉化為可執行**的命令,但是會影響編譯過程的各個方面。
它用來做什麼呢?
當計畫發布兩個版本的**的時候。即基本版和擁有更多版本的企業版,就可以用到預處理器指令。
在編譯基本版的時候,使用預處理指令會禁止編譯器編譯與額外功能相關的**。
另外,在編寫提供除錯資訊的**時,也可以使用預處理器指令。
下面介紹預處理器指令的功能:
#define和#undef
#define用法: #define debug
debug可以看做是宣告的乙個變數,但此變數沒有真正的值,僅存在。
#define單獨用沒什麼意義,一般是和#if結合使用。
#undef用法: #undef debug
作用就是刪除debug的定義。如果debug符號不存在,這條指令就沒有任何作用。如果debug符號存在,則之前的#define就沒有作用。
#define與#undef宣告必須放在c#原始檔的開頭位置,即程式集的引用的上方。
#if,#elif,#else和#endif
下面來看乙個例子
#elif(=else if)和#else指令可以用在#if中,和c#中的if,else if,else含義相同。
#if和#elif支援一組邏輯運算子"!","==","!="和"||",如果符號存在,則為true。
#if debugb && debuga //當debug與debuga同時存在才會執行
#warning和#error
當編譯器遇到這兩條指令時,會分別產生警告和錯誤。如果編譯器遇到#warning指令,會顯示該指令後的文字,之後繼續編譯。
如果遇見#error指令,也會顯示指令後面的文字。但會立刻退出編譯,不會產生il**。(其實和編譯器的警告和錯誤意
下圖為放開#error注釋:
#region和#endregion
這兩條指令,大家應該非常熟悉,作用就是**縮排和指定該**塊的名稱,使得**可以更好的布局。詳細用法可以參照報表系列的**。
#line
這條指令很少用到。作用就是:如果**在編譯之前,要使用某些軟體包改變輸入的**,就可以使用它。
(其實就是更改**的行號)
#pragma warning
此指令可啟用或禁用某些警告。
用法: #pragma warning disable warning-list
#pragma warning restore warning-list
例子:
static#pragma checksum作用是生成原始檔的校驗和,以幫助除錯 asp.net 頁。void main(string
args)
用法: #pragma checksum "filename" "" "checksum bytes"
filename"
要求監視更改或更新的檔案的名稱。 ""
檔案的全域性唯一識別符號 (guid)。
"checksum_bytes"
十六進製制數的字串,表示校驗和的位元組。
必須是偶數字的十六進製制數。
奇數字的十六進製制數字會導致編譯時警告,然後指令被忽略。
例子:
C 預處理指令
1.define 通常和 if一起使用 使用 define可以定義乙個符號,並通過將該符號用作表示式傳遞給 if 指令,使該表示式的計算結果為true 比如 preprocessor if.cs define debug define vc v7 using system public class ...
C預處理指令
一 預處理的由來 在c 的歷史發展中,有很多的語言特徵 特別是語言的晦澀之處 來自於c語言,預處理就是其中的乙個。c 從c語言那裡把c語言預處理器繼承過來 c語言預處理器,被bjarne博士簡稱為cpp,不知道是不是c program preprocessor的簡稱 二 常見的預處理功能 預處理器的...
C 預處理指令
巨集定義指令定義了乙個識別符號 巨集名 及乙個字串,在源程式中每次遇到該識別符號時,均以定義的字串替換它 巨集替換 巨集名和引數間不能有空格,識別符號和字串間可有任意空格 字串中應習慣對巨集引數加上括號,這樣使用巨集時,如果實參是表示式,則不易出錯 巨集替換只作巨集名和引數替換,不做計算,不做表示式...