C 基礎系列二 預處理器

2022-09-14 06:51:10 字數 1441 閱讀 7994

(1)常見預處理器指令集

c++繼承了c的非常精細的預處理器,以高度受限的方式使用預處理器。預處理器主要的指令及功能如下表:

指令功能

#空指令,無任何效果

#include

包含乙個源**檔案,把原始檔中的#include擴充套件為檔案正文,即把包含.h的檔案找到並擴充套件到#include所在處

#define

定義巨集#undef

取消已定義的巨集

#if條件編譯指令,如果為真,則編譯下面的**

#ifdef

條件編譯指令,如果巨集已經定義,則編譯下面的**

#ifndef

條件編譯指令,如果巨集沒有定義,則編譯下面的**

#elif

條件編譯指令。如果之前的if不為真,當前條件為真,則編譯下面**

#endif

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

#error

停止編譯並顯示錯誤資訊

下面簡要介紹預處理器使用的比較多的幾個地方:

(2)標頭檔案保護符:#ifndef ,#define ,#endif

標頭檔案保護符:#ifndef ,#define ,#endif,是為了避免某個標頭檔案被多重包含。如類person中包含了標頭檔案string,而使用person類的程式中也許並不確定person中是否已經包含string,於是它便再次#include,這樣一來,string就被包含了兩次,為了保證多次包含同一標頭檔案不會引起該標頭檔案定義的類和物件被多次定義,就需要採用標頭檔案保護符。

#define表示接受乙個名字並定義該名字為預處理器變數;#ifndef指示檢測指定的預處理器變數是否未定義,如果未定義,那麼跟在其後的所有指示都被處理,直到出現#endif。

(3)#include 和#include "filename.h"

對於#include ,編譯器先從標準庫路徑開始搜尋filename.h,然後從本地目錄搜尋,用於系統檔案呼叫較快;

而#include "filename.h",編譯器先從使用者的當前工作路徑中開始搜尋filename.h,然後尋找系統路徑,用於自定義檔案較快。

(4)使用預處理器進行除錯

如果程式設計師希望程式所包含的除錯**僅在開發過程中執行,當應用程式已經完成並且準備提交時,就將除錯**關閉,那麼可以通過使用ndebug預處理變數實現有條件的除錯**:

1

void

main()

2

上面的**中,如果ndebug未定義,那麼第4行就會執行。開發完成後,可通過定義預處理變數ndebug來刪除這些除錯語句。大多數編譯器都提供ndebug的命令列選型:

$ cc -dndebug main.c

上述命令等效於在main.c的開頭提供#define ndebug的預處理命令。

C 預處理器

偶爾翻c 的教材,看到了一些以前自己不太關注的角落。參考教材 c 大學教程 harvey m.deitel 和paul james deitel著。預處理發生在編譯之前,包括把其他檔案包含到要編譯的檔案中 定義符號常量和巨集 程式 的條件編譯以及預處理指令的條件執行。對應的,預處理指令有 檔案包含命...

C 預處理器

預處理器是一些指令,指示編譯器在實際編譯之前所需完成的預處理。所有的預處理器指令都是以井號 開頭,只有空格字元可以出現在預處理指令之前。預處理指令不是 c 語句,所以它們不會以分號 結尾。我們已經看到,之前所有的例項中都有 include指令。這個巨集用於把頭檔案包含到原始檔中。c 還支援很多預處理...

C 預處理器

預處理器是一些指令,指示編譯器在實際編譯之前所需完成的預處理。所有的預處理器指令都是以井號 開頭,只有空格字元可以出現在預處理指令之前。預處理指令不是 c 語句,所以它們不會以分號 結尾。我們已經看到,之前所有的例項中都有 include指令。這個巨集用於把頭檔案包含到原始檔中。c 還支援很多預處理...