1. 程式人生 > >C語言中的條件編譯及編譯預處理

C語言中的條件編譯及編譯預處理

在C 語言中,並沒有任何內在的機制來完成如下一些功能:在編譯時包含其他原始檔、定義巨集、根據條件決定編譯時是否包含某些程式碼。要完成這些工作,就需要使用預處理程式。儘管在目前絕大多數編譯器都包含了預處理程式,但通常認為它們是獨立於編譯器的。預處理過程讀入原始碼,檢查包含預處理指令的語句和巨集定義,並對原始碼進行響應的轉換。預處理過程還會刪除程式中的註釋和多餘的空白字元。使用條件編譯,可以通過預編譯指令來設定編譯條件,根據不同的需要來編譯不同的程式碼

預處理指令是以#號開頭的程式碼行。#號必須是該行除了任何空白字元外的第一個字元。#後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字元。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對原始碼做某些轉換

下面是部分預編譯指令及其用途

指令              用途

#空指令,無任何效果

#include     包含一個原始碼檔案

#define定義巨集

#undef取消已定義的巨集

#if如果給定定義條件,則編譯下面的程式碼

#ifdef如果巨集已經定義,則編譯下面的程式碼

#ifndef如果巨集沒有定義,則編譯下面的程式碼

#elif如果前面的#if給定的條件不為真,當前條件為真,則編譯下面的程式碼(else if的縮寫)

#endif結束一個#if......#else條件編譯塊

#error停止編譯並顯示錯誤資訊

Eg:#if A

語句塊1

#endif

=>如果A為真,則編譯語句塊1,否則不編譯

Eg:#ifdef B

語句塊2

#endif

=>如果定義了B的巨集,則編譯語句塊2,否則不編譯

Eg:#ifndeif C

語句塊3

#endif

=>如果沒有定義C的巨集,則編譯語句塊3,否則不編譯