標頭檔案經常需要其他標頭檔案 避免多重包含

2021-08-14 04:40:11 字數 1212 閱讀 7293

在編寫標頭檔案之前,我們需要引入一些額外的預處理器設施。預處理器允許

我們自定義變數。

預處理器變數 的名字在程式中必須是唯一的。任何與預處理器

變數相匹配的名字的使用都關聯到該預處理器變數。

為了避免名字衝突,預處理器變數經常用全大寫字母表示。

預處理器變數有兩種狀態:已定義或未定義。定義預處理器變數和檢測其狀

態所用的預處理器指示不同。#define 指示接受乙個名字並定義該名字為預處理

器變數。#ifndef 指示檢測指定的預處理器變數是否未定義。如果預處理器變數

未定義,那麼跟在其後的所有指示都被處理,直到出現 #endif。

可以使用這些設施來預防多次包含同一標頭檔案:

#ifndef salesitem_h

#define salesitem_h

// definition of sales_itemclass and related functions goes here

#endif

條件指示

#ifndef salesitem_h

測試 salesitem_h 預處理器變數是否未定義。如果 salesitem_h 未定義,

那麼 #ifndef 測試成功,跟在 #ifndef 後面的所有行都被執行,直到發現

#endif。相反,如果 salesitem_h 已定義,那麼 #ifndef 指示測試為假,該指

示和 #endif 指示間的**都被忽略。

為了保證標頭檔案在給定的原始檔中只處理過一次,我們首先檢測 #ifndef。

第一次處理標頭檔案時,測試會成功,因為 salesitem_h 還未定義。下一條語句

定義了 salesitem_h。那樣的話,如果我們編譯的檔案恰好又一次包含了該頭文

件。#ifndef 指示會發現 salesitem_h 已經定義,並且忽略該標頭檔案的剩餘部

分。標頭檔案應該含有保護符,即使這些標頭檔案不會被其他頭

檔案包含。編寫標頭檔案保護符並不困難,而且如果頭文

件被包含多次,它可以避免難以理解的編譯錯誤。

當沒有兩個標頭檔案定義和使用同名的預處理器常量時,這個策略相當有效。

我們可以為定義在標頭檔案裡的實體(如類)命名預處理器變數來避免預處理器變

量重名的問題。乙個程式只能含有乙個名為 sales_item 的類。通過使用類名來

組成標頭檔案和預處理器變數的名字,可以使得很可能只有乙個檔案將會使用該預

處理器變數。

Linux標頭檔案 C C 標頭檔案

linux標頭檔案 c c 標頭檔案。linux常用標頭檔案如下 posix標準定義的標頭檔案 目錄項 檔案控制 檔名匹配型別 路徑名模式匹配型別 組檔案 網路資料庫操作 口令檔案 正規表示式 tar歸檔值 終端i o 符號常量 檔案時間 字元擴充套件型別 internet定義 套接字本地介面 in...

避免標頭檔案的多重包含

通過預處理器變數,我們可以以標頭檔案保護符的形式避免在已經見到標頭檔案的情況下重新處理該標頭檔案的內容。使用預處理器變數作為標頭檔案保護符。預處理器變數有兩種狀態 已定義與未定義。define指示接受乙個名字並定義該名字為預處理器變數。ifndef指示檢測指定的預處理器變數是否未定義。如果預處理器變...

避免標頭檔案的重定義

假設原始檔test.c中包含a.h和b.h兩個標頭檔案,而a.h和b.h裡又都包含另乙個標頭檔案x.h 很常見 那麼x.h就會被test.c兩次include,如果x.h裡定義了某結構體,如 typedef struct test 預處理 見c編譯過程 後,test.c裡包含兩個struct tes...