C 預編譯指令

2021-06-23 07:50:56 字數 1891 閱讀 4000

下面對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("release");

#else

console.write("other");

#endif

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

3.#warning、#error

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

#if debug 

#warning 現在是debug狀態

#elif release

#warning 現在是release狀態

#else

#error 並清楚什麼狀態

#endif

4.#region 和#endregion

這個兩個用來組成**塊

5.#line

這個指令可以改變編譯器在警告和錯誤資訊中顯示的檔名和行號資訊,用#line default把行號恢復為預設的行號。

#line [ number ["file_name"] | default ]

number

要為源**檔案中後面的行指定的編號。

"file_name"(可選)

希望出現在編譯器輸出中的檔名。預設情況下,使用源**檔案的實際名稱。檔名必須括在雙引號 ("") 中。

default

重置檔案中的行編號。

備註 #line 可能由生成過程中的自動中間步驟使用。例如,如果中間步驟從原始的源**檔案中移除行,但是您仍希望編譯器基於檔案中的原始行號生成輸出,則可以移除行,然後用 #line 模擬原始行號。

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

示例1:

// preprocessor_line.cs

public class myclass2  }

示例2:

下面的示例說明偵錯程式如何忽略**中的隱藏行。執行此示例時,它將顯示三行文字。但是,當設定如示例所示的斷點並按 f10 鍵逐句通過**時,您將看到偵錯程式忽略了隱藏行。另請注意,即使在隱藏行上設定斷點,偵錯程式仍會忽略它。

// preprocessor_linehidden.cs

using system;

class myclass  }

6.#pragma

可以抑制或恢復指定的編譯警告。與命令列選項不同,#pragma指令可以在類和方法上執行,對抑制什麼警告和抑制的時間進行更精細的控制。

#pragma warning disable 169

public class aclass

#pragma warning restore 169

c 的預編譯指令

c 預處理器指令是在編譯時呼叫的。預處理器指令 preprocessor directive 告訴c 編譯器要編譯哪些 並指出如何處理特定的錯誤和警告。c 預處理器指令還可以告訴c 編輯器有關 組織的資訊。1.定義符號和取消符號定義的預處理指令 define 和 undef 預處理指令都以 號開頭並...

C 預編譯指令分析

c 程式的編譯過程可以分為預處理 編譯 彙編三部分。預處理部分的過程是掃瞄程式源 對源 中的指令標註進行初步的轉換,產生新的源 提供給c 編譯器。預處理時讀入源 之後,會檢查 裡包含的預處理指令,進行 包含其他原始檔 定義巨集 根據條件決定編譯時是否包含某些 的工作。下面是c c 中預編譯的各種指令...

C 基礎13 預編譯指令

ps 注釋和講解全在 中 預編譯指令也叫預處理指令,在程式正式編譯之前執行 這些指令不會轉化為可執行 中的命令,但是會影響編譯過程的各個方面 具體例子如 using system using system.collections.generic using system.linq using sys...