預處理指令

2022-04-11 02:20:35 字數 2565 閱讀 7637

雖然同c和c++的術語「預處理指令」名稱一樣,但c#的其實並沒有單獨的預處理步驟,也就是說在vs等環境中並沒有預處理的編譯器。

預處理指令能夠用於替換原始檔中的資訊。以#(sharp)字元和預處理指令名稱開頭。例如:

#define max
習慣於將預處理指令的名稱全部設為大寫。和c與c++不同的是,c#中的預處理指令的名稱後不加數字等。c\c++所支援的巨集函式在c#中也是不支援的。

還可以使用#region來設定乙個區域,同時也可以通過visual studio讓**摺疊。往往在#region後加上該區域的名稱的字串,可以實現注釋的作用。

#region c#預處理指令

#endregion

1.#undef

上面我們使用了#define,其實還是有#undef的。那麼它又是做什麼的呢?

#define max

static

void main(string args)

如果我們debug程式,就會在控制台看到這樣一條:

max已經定義了。
如果我們release程式,得到的結果也還是一樣的,但是如果在**開頭加上:

#undef max
再來debug控制台就不會有訊息提示了。

2.#if、#else、#elif

如果想要控制台顯示max沒有定義的情況,那就用#else來搭配#if就可以了。

#if (max) 

console.writeline("max已經定義了。");

#else

console.writeline("max還沒有定義。");

#endif

或許你在鍵入#else的時候也看到了#elif,這個自然就是對應的else if了。它們的邏輯和常規的if套裝是一樣的。

#define max

#undef max

#define min

static

void main(string args)

3.#warning、#error

這兩個預處理指令用於丟擲異常和錯誤。

#warning 這是乙個強制丟擲的異常。

#error 這是乙個強制丟擲的錯誤。

4.#line

我們還可以用#line將以下#error這行**的行數設定為10000行,並將檔名設定為」錯誤「。

如果我們再新增這樣一行**,則會將行數和檔名恢復為預設的。

#line 10000 "error"

#error 這是乙個強制丟擲的錯誤。

#line default

#warning 這是乙個強制丟擲的警告。

我們先在program類前加上這樣一行**,它會引發cs3021錯誤。

[clscompliant(false)]
然後我們在上面這行**前加入以下這行**,其作用是禁用warning 3021。那麼再次debug就會發現原本的錯誤已經不在了。

#pragma

warning disable 3021

如果想要在後文中恢復這個cs3021錯誤,就用restore即可。

#pragma

warning restore 3021

以下是完整**。

#pragma

warning disable 3021

[clscompliant(false)]

class program

}#pragma

warning restore 3021

[clscompliant(false)]

public

class otherprogram

}

這個預處理指令其實是非常複雜的,在各大百科上已經有了相關介紹,以下是維基百科上的。傳送門:pragma once。

預處理指令

預處理指令是我們寫在程式 中的給預處理器 preprocessor 的 命令,而不是程式本身的語句。預處理器在我們編譯乙個c 程式時由編譯器自動執行,它負責控制對程式 的第一次驗證和消化。所有這些指令必須寫在單獨的一行中,它們不需要加結尾的分號 在這個教程的開頭我們已經提到了一種預處理指令 defi...

預處理指令

1.人們常常稱機器語言為目標 object code 2.預處理命令 preprocessor directives 三種預處理包括 巨集定義 檔案包含 條件編譯。在對源程式編譯之前,會對程式中的所有預處理指令進行處理。預處理就是在進行編譯的第一遍詞法掃瞄和語法分析之前所作的工作。說白了,就是對原始...

預處理指令

普通 define 巨集名 字串 define my int int define max 10000 帶引數 define 巨集名 形參 字串 define add x,y x y 在大規模的開發過程中,特別是跨平台和系統的軟體裡,條件編譯很重要。include using namespace s...