C C 標頭檔案作用

2021-06-22 05:33:23 字數 2442 閱讀 6467

參考: + + 

**********==c標頭檔案**********==

------------由來------------

那是乙個被遺忘的年代,在編譯器只認識.c(.cpp))檔案,而不知道.h是何物的年代。那時的人們寫了很多的.c(.cpp)檔案,漸漸地,人們發現在很多.c(.cpp)檔案中的宣告語句就是相同的,但他們卻不得不乙個字乙個字地重複地將這些內容敲入每個.c(.cpp)檔案。但更為恐怖的是,當其中乙個宣告有變更時,就需要檢查所有的.c(.cpp)檔案,並修改其中的宣告,啊~簡直是世界末日降臨!

終於,有人(或許是一些人)再不能忍受這樣的折磨,他(們)將重複的部分提取出來,放在乙個新檔案裡,然後在需要的.c(.cpp)檔案中敲入#include ***x這樣的語句。這樣即使某個宣告發生了變更,也再不需要到處尋找與修改了---世界還是那麼美好!

因為這個新檔案,經常被放在.c(.cpp)檔案的頭部,所以就給它起名叫做「標頭檔案」,副檔名是.h. 從此,編譯器(其實是預處理器)就知道世上除了.c(.cpp)檔案,還有個.h的檔案,以及乙個叫做#include命令。

------------實質-----------

從c編譯器角度看(參考文章編譯過程),.h和.c沒啥必然聯絡,就是改名為.txt、.doc也沒有大的分別。因為 #include "xx.h" 這個巨集其實際意思就是把當前這一行刪掉,把 xx.h 中的內容原封不動的插入在當前行的位置。理論上來說標頭檔案裡與c檔案的內容,只要是c語言所支援的,無論寫什麼都可以的,比如你在標頭檔案中寫函式體,只要在任何乙個c檔案包含此標頭檔案就可以將這個函式編譯成目標檔案的一部分。

------------標頭檔案應該有什麼-----------

--1.如果在標頭檔案中實現乙個函式體,那麼如果在多個c檔案中引用它,而且又同時編譯多個c檔案,將其生成的目標檔案連線成乙個可執行檔案,在每個引用此標頭檔案的c檔案所生成的目標檔案中,都有乙份這個函式的**,如果這段函式又沒有定義成區域性函式,那麼在連線時,就會發現多個相同的函式,就會報錯;

--2.如果在標頭檔案中定義全域性變數,並且將此全域性變數賦初值,那麼在多個引用此標頭檔案的c檔案中同樣存在相同變數名的拷貝,關鍵是此變數被賦了初值,所以編譯器就會將此變數放入data段,最終在連線階段,會在data段中存在多個相同的變數,它無法將這些變數統一成乙個變數,也就是僅為此變數分配乙個空間,而不是多份空間,假定這個變數在標頭檔案沒有賦初值,編譯器就會將之放入bss段,聯結器會對bss段的多個同名變數僅分配乙個儲存空間;

--3.如果在c檔案中宣告巨集,結構體,函式等,那麼我要在另乙個c檔案中引用相應的巨集,結構體,就必須再做一次重複的工作,如果我改了乙個c檔案中的乙個宣告,那麼又忘了改其它c檔案中的宣告,這不就出了大問題了,程式的邏輯就變成了你不可想象的了,如果把這些公共的東東放在乙個標頭檔案中,想用它的c檔案就只需要引用乙個就ok了!這樣豈不方便,要改某個宣告的時候,只需要動一下頭檔案就行了

--4.當你需要將你的**封裝成乙個庫,讓別人來用你的**,你又不想公布原始碼,那麼人家如何利用你的庫呢?也就是如何利用你的庫中的各個函式呢??一種方法是公布原始碼,別人想怎麼用就怎麼用,另一種是提供標頭檔案,別人從頭檔案中看你的函式原型,這樣人家才知道如何呼叫你寫的函式,就如同你呼叫printf函式一樣。

總結:--h檔案裡應該有什麼:常量,結構,型別定義,函式,變數宣告。

--h檔案不應該有什麼:變數定義, 函式定義。

------------標頭檔案作用-----------

--1.方便開發:包含一些檔案需要的共同的常量,結構,型別定義,函式,變數申明;

--2. 使函式的作用域從函式宣告的位置開始,而不是函式定義的位置(實踐總結);

--3 .提供介面:對乙個軟體包來說可以提供乙個給外界的介面(例如: stdio.h);

**********==c++標頭檔案**********==

--類似c標頭檔案作用,不過標頭檔案中多了類的結構宣告。

備註:--1.標頭檔案中只存放「宣告」而不存放「定義」,在c++ 語法中,類的成員函式可以在宣告的同時被定義,並且自動成為內聯函式。這雖然會帶來書寫上的方便,但卻造成了風格不一致,弊大於利。建議將成員函式的定義與宣告分開,不論該函式體有多麼小。

--2.相似原因:c++ 中要使用標頭檔案,最主要的原因是 c++ 的同乙個專案可能有多個源**檔案,要命的是這些源**是分別單獨編譯的。也就是說,在編譯其中乙個檔案時,編譯器並不知道其它檔案中定義的內容,如類、全域性變數等。這就要求我們必須在要使用某個類、函式或變數的每個檔案中宣告它,否則 c++ 是無法找到它的。很多檔案可能都需要使用加法。假設有乙個檔案 b.cpp 需要使用這個函式,那麼,它必須先宣告它,雖然不需要再重寫。如果有很多檔案都要使用這個函式,那麼這會變得麻煩,特別的,如果你寫了乙個類,那麼你需要維護大量的宣告(對於每乙個 public 物件),並且如果你的類的定義發生了改變,你可能不得不改變無數個宣告。

c c 標頭檔案的作用

每個c c程式通常分為兩個檔案。乙個檔案用於儲存程式的宣告 declaration 稱為標頭檔案。另乙個檔案用於儲存程式的實現 implementation 稱為定義 definition 檔案。c c程式的標頭檔案以 h 為字尾,c程式的定義檔案以 c 為字尾,c 程式的定義檔案通常以 cpp 為...

C,C 標頭檔案的作用

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

Linux標頭檔案 C C 標頭檔案

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