關注C 細節 寫標頭檔案注意

2021-12-30 00:39:13 字數 923 閱讀 6382

在c++中我們寫標頭檔案時經常需要#include來包含其他標頭檔案。標頭檔案定義的實體經常使用其他標頭檔案的設施。

包含其他標頭檔案是如此的司空見慣,甚至乙個標頭檔案被多次包含進同一原始檔中也不是什麼稀奇的事。例如乙個標頭檔案中用到string型別的變數,而包含這個標頭檔案的原始檔中也用到string型別的變數,這個時候string標頭檔案就被包含了兩次:一次是通過程式本身直接包含,另一次是通過包含自寫標頭檔案而間接包含。

因此,設計標頭檔案的時候,應該使其可以多次包含在同一原始檔中,這一點是很重要的。我們必須保證多次包含同一標頭檔案不會引起該標頭檔案的類和物件被多次定義。使得標頭檔案安全的通用做法是使用預處理器定義的標頭檔案保護符。標頭檔案保護符用於避免在已經見到標頭檔案的情況下重新處理該標頭檔案的內容。

在編寫標頭檔案之前,我們需要引入一些額外的預處理器設施。預處理器允許我們自定義變數。www.2cto.com

為了避免命名衝突,預處理器變數經常用全大寫字母表示。預處理器變數有兩種狀態:一定義和未定義。定義預處理器變數和檢測器狀態所用的預處理器指示不同。#define指示接受乙個名字並定義該名字為預處理器變數。#ifndef指示檢測指定的預處理器變數是否未定義。如果預處理器變數未定義,那麼跟在其後面的所有指示都被處理,直到出現#endif。為了保證標頭檔案在給定的原始檔中只處理一次,我們首先檢測#ifndef。第一次處理標頭檔案時,測試會成功,因為相應的預處理器還未定義。下一條語句就定義了該預處理器變數。那樣的話,如果我們編譯的檔案敲好又一次包含了該標頭檔案,#ifndef指示會發現該預處理器已經定義,並且忽略該標頭檔案的剩餘部分。

當沒有兩個標頭檔案定義和使用同名的預處理器變數時,這個策略相當有效。我們可以用定義在標頭檔案裡的實體(如類)來命名預處理器變數來避免預處理器變數重名的問題。

注意:標頭檔案應該包含有保護符,即使這些標頭檔案不會被其他標頭檔案包含。編寫標頭檔案保護符並不難,而且如果標頭檔案被包含多次,它可以避免難以理解的編譯錯誤。

作者 凌風

寫blog注意的小細節

1.別人寫過的blog,請不要再寫了。如今,我們在查詢資料的時候大多是借用搜尋引擎,搜尋引擎做的很好,但它有時也不能把所有相同的內容過濾掉。所以當我們google某個內容的時候,有時第一頁顯示出來的內容都是一樣的。要麼是不同的人寫的 要麼是乙個人寫的乙份,在幾個不同的blog 上貼出來。筆者個人很不...

標頭檔案函式 C語言中的標頭檔案寫哪些內容

在c語言中,標頭檔案是程式各部分之間保證資訊一致性的橋梁,是連線程式物件定義和使用的紐帶。通常開發c程式的程式設計師會把乙個程式分為兩類 定義好標頭檔案是保證大型程式開發工作能夠順利進行的重要環節。比如幾個人共同開發乙個大系統,他們之間需要有一些約定。如果乙個人定義的東西唄另乙個人使用,就需要通過引...

關注C 細節 抽象的理解

include using namespace std class a int main 該程式輸出func a,試分析其背後的原理 這主要涉及的是c 的記憶體模型問題,其實就是c 的抽象機制 c 物件雖然封裝了成員函式 成員變數 屬性 但成員函式和成員變數的處理方法是完全不同的,成員函式是整個類公...