C C 中的標頭檔案( h) 詳解(1)

2021-08-15 12:09:22 字數 1628 閱讀 8723

fishing-pan:

之前寫過一篇《c++中標頭檔案的使用》,那篇文章主要講述c++中標頭檔案的使用以及注意問題,但是總覺得寫的很淺,很簡單。沒有把問題講清楚,所以今天想好好整理一下思路,講一講c++中的標頭檔案到底是幹什麼的。本篇部落格的主要是把自己早前學習c++時候做的一些筆記整理了一下,**也主要是論壇上一些大神的部落格,以及一些c++學習的入門書籍。

標頭檔案是擴充套件名為.h的檔案,與原始檔(.cpp)一樣,標頭檔案中也是c++的源**,標頭檔案中包含了 c++中函式、類、物件等的宣告和巨集定義,它可以被多個原始檔通過#include引用共享。

乙個事物存在,必有其存在的價值和意義,標頭檔案也一樣。

c++中有「單一定義」規則,即乙個物件只能被定義一次,如果在乙個原始檔中定義了乙個函式,其他的原始檔想要使用這個函式就需要在使用前宣告一下這個函式,在編譯結束之後,編譯器鏈結的時候再去查詢這些函式的定義。

當只有一兩個函式,原始檔的數目也不多的時候,我們完全可以直接在原始檔中宣告這些函式或者變數。但是當我們面臨乙個大的專案時,幾百個函式,非常多的變數,100個原始檔。如果每個函式都在每個原始檔中宣告。那就太麻煩,太費事了。

所以,為了達到在不同的原始檔中宣告的一致性,為了省去這些繁瑣又重複的過程,我們可以把這些物件的宣告都放在少數幾個檔案中,需要用到這些宣告的時候再到這些檔案中查詢,這樣的檔案,就是標頭檔案。

對於程式設計師自己編寫的標頭檔案的包含使用"filename";

#include "ca.h"
對於標準庫標頭檔案的包含使用< filename>;

#include
切記,標頭檔案是不參與編譯的,編譯器只對原始檔進行編譯。編譯器首先對原始檔進行預處理,這一步叫預編譯。預編譯的時候完成標頭檔案中的巨集的處理,並且根據#include指令將標頭檔案展開;

我們看乙個簡單的例子,下面是乙個標頭檔案ca.h

#ifndef ca_h

#define ca_h

int fun();

#endif

有兩個原始檔a.cpp與b.cpp都包含了ca.h

a.cpp;

#include "ca.h"

int fun()

b.cpp;

#include "ca.h"

int fun1()

經過預編譯後,這兩個原始檔分別變為;   

#ifndef ca_h

#define ca_h

int fun();

#endif

int fun()

#ifndef ca_h

#define ca_h

int fun();

#endif

int fun1()

這樣就實現了再a.cpp與b.cpp中對函式int fun()的宣告。

接下篇。。。

相關鏈結。。《c++中標頭檔案的使用》 、c++中的標頭檔案(.h)—詳解(2)

C C 標頭檔案詳解

1 conio.h conio.h不是c標準庫中的標頭檔案,在c standard library,iso c 和posix標準中均沒有定義。conio是console input output 控制台輸入輸出 的簡寫,其中定義了通過控制台進行資料輸入和資料輸出的函式,主要是一些使用者通過按鍵盤產生...

C C標頭檔案 h和 c

在c語言家族程式中,標頭檔案被大量使用。一般而言,每個c c程式通常由標頭檔案 header files 和定義檔案 definition files 組成。標頭檔案作為一種包含功能函式 資料介面宣告的載體檔案,主要用於儲存程式的宣告 declaration 而定義檔案用於儲存程式的實現 imple...

h標頭檔案中的ifndef define

的作用 rel noopener noreferrer h標頭檔案中的ifndef define endif 的作用 漠北13.h標頭檔案中的ifndef define endif 的作用?答 防止該標頭檔案被重複引用。14.i nclude與 i nclude file.h 的區別?答 前者是從s...