c 預處理指令

2021-07-25 05:59:01 字數 2370 閱讀 1046

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

void main(string

args)

#pragma checksum作用是生成原始檔的校驗和,以幫助除錯 asp.net 頁。

用法:  #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 預處理指令

巨集定義指令定義了乙個識別符號 巨集名 及乙個字串,在源程式中每次遇到該識別符號時,均以定義的字串替換它 巨集替換 巨集名和引數間不能有空格,識別符號和字串間可有任意空格 字串中應習慣對巨集引數加上括號,這樣使用巨集時,如果實參是表示式,則不易出錯 巨集替換只作巨集名和引數替換,不做計算,不做表示式...