C++預處理功能:頭文件保護符

現在還在看C++ primer這本書,暫時還在理解階段,先記下自己覺得比較重要的東西。

C++預處理命令是對程序代碼在正式編譯以前的一些預先出來,最常見的預處理有文件包含、條件編譯、佈局控制和宏替換。

1、C++一項預處理功能是頭文件保護符,頭文件保護符依賴於預處理變量。

預處理變量有兩種狀態:已定義和未定義。

#define 指令把一個名字設定爲預處理變量,另外兩個變量則則分別檢查某個指定的預處理變量是否定義:#ifdef當且僅當變量已定義時爲真,#ifndef當且僅當變量未定義時爲真。一旦檢查結果爲真,則執行後續操作直至遇到#endif指令爲止。

使用這些功能就能有效的防止重複包含的發生。

2、整個程序中的預處理變量包括頭文件保護符必須唯一,通常的做法是基於頭文件中類的名字來構建保護符的名字,以確保其唯一性。爲了避免與程序中的其他實體發生名字衝突,一般把預處理變量的名字大寫。

頭文件即使目前還沒有被包含在任何其他頭文件中,也應該設置保護符。

例如:

#ifndef SALEAS_DATA_H
#define SALES_DATA_H
#include<string>
struct sales_data
{
    std::string bookno;
    unsigned units_sold;
    double revenue;
};
#endif
int main()
{
    return 0;
}

第一次包含sales_data.h時,#ifndef的檢查結果爲真,預處理器將順序執行後面的操作直至遇到#endif爲止。此時,預處理變量SALES_DATA_H的值將變爲已定義,而且sales_data.h也會被拷貝到我們的程序中來。後面如果再一次包含sales_data.h,則ifndef的檢查結果將爲假,編譯器將忽略#ifndef到#endif之間的部分。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章