標頭檔案和原始檔有什麼區別,C語言程式碼的標頭檔案與原始檔有什麼區別?

時間 2022-02-14 14:55:05

1樓:zhurenyan水瓶

標頭檔案和原始檔的區別表現在:字尾不同、內容不同。

1、字尾不同

字尾為.h的檔案是標頭檔案。

字尾為.c的檔案是原始檔,內含函式實現,變數定義等內容。

2、內容不同

標頭檔案用來寫類的宣告 (包括類的成員的宣告和方法宣告)、函式原型、#define常數等。

原始檔主要寫實現標頭檔案中已經宣告的那些函式的具體**。

標頭檔案的組成標頭檔案一般由四部分內容組成:

(1)標頭檔案開頭處的版權和版本宣告;

(2)預處理塊;

(3)inline函式的定義;

(4)函式和類結構宣告等。

在標頭檔案中,用ifndef/define/endif結構產生預處理塊,用#include格式來引用庫的標頭檔案。標頭檔案的這種結構,是利用c語言進行開發軟體所通常具備的,屬於公有知識。

2樓:福建省寧德市

標頭檔案和原始檔在本質上沒有任何區別。   只不過一般:字尾為  .

h 的檔案是標頭檔案,內含函式宣告、巨集定義、結構體定義等內容。字尾為  .c 的檔案是原始檔,內含函式實現,變數定義等內容。

而且是什麼字尾也沒有關係,只不過編譯器會預設對某些字尾的檔案採取某些動作。這樣分開寫成兩個檔案是一個良好的程式設計風格。

簡單的說其實要理解c檔案與標頭檔案(即.h)有什麼不同之處,首先需要弄明白編譯器的工作過程,一般說來編譯器會做以下幾個過程:

①預處理階段

②詞法與語法分析階段

③ 編譯階段,首先編譯成純彙編語句,再將之彙編成跟cpu相關的二進位制碼,生成各         個目標檔案 (.obj檔案)

④連線階段,將各個目標檔案中的各段**進行絕對地址定位,生成跟特定平臺相關           的可執行檔案,當然,最後還可以用objcopy生成純二進位制碼,也就是去掉了檔案格         式信 息。(生成.exe檔案)

3.比方說 在aaa.h裡定義了一個函式的宣告,然後在aaa.

h的同一個目錄下建立aaa.c , aaa.c裡定義了這個函式的實現,然後是在main函式所在.

c檔案裡#include這個aaa.h  然後我就可以使用這個函式了。 main在執行時就會找到這個定義了這個函式的aaa.

c檔案。這是因為:main函式為標準c/c++的程式入口,編譯器會先找到該函式所在的檔案。

假定編譯程式編譯myproj.c(其中含main())時,發現它include了mylib.h(其中宣告瞭函式void test()),那麼此時編譯器將按照事先設定的路徑(include路徑列表及**檔案所在的路徑)查詢與之同名的實現檔案(副檔名為.

cpp或.c,此例中為mylib.c),如果找到該檔案,並在其中找到該函式(此例中為void test())的實現**,則繼續編譯;如果在指定目錄找不到實現檔案,或者在該檔案及後續的各include檔案中未找到實現**,則返回一個編譯錯誤.

其實include的過程完全可以「看成」是一個檔案拼接的過程,將宣告和實現分別寫在標頭檔案及c檔案中,或者將二者同時寫在標頭檔案中,理論上沒有本質的區別。以上是所謂動態方式。對於靜態方式,基本所有的c/c++編譯器都支援一種連結方式被稱為static link,即所謂靜態連結。

在這種方式下,我們所要做的,就是寫出包含函式,類等等宣告的標頭檔案(a.h,b.h,...

),以及他們對應的實現檔案(a.cpp,b.cpp,...

),編譯程式會將其編譯為靜態的庫檔案(a.lib,b.lib,...

)。在隨後的**重用過程中,我們只需要提供相應的標頭檔案(.h)和相應的庫檔案(.

lib),就可以使用過去的**了。相對動態方式而言,靜態方式的好處是實現**的隱蔽性,即c++中提倡的「介面對外,實現**不可見」。有利於庫檔案的**.

c語言**的標頭檔案與原始檔有什麼區別?

3樓:福建省寧德市

標頭檔案和原始檔在本質上沒有任何區別。   只不過一般:字尾為  .

h 的檔案是標頭檔案,內含函式宣告、巨集定義、結構體定義等內容。字尾為  .c 的檔案是原始檔,內含函式實現,變數定義等內容。

而且是什麼字尾也沒有關係,只不過編譯器會預設對某些字尾的檔案採取某些動作。這樣分開寫成兩個檔案是一個良好的程式設計風格。

簡單的說其實要理解c檔案與標頭檔案(即.h)有什麼不同之處,首先需要弄明白編譯器的工作過程,一般說來編譯器會做以下幾個過程:

①預處理階段

②詞法與語法分析階段

③ 編譯階段,首先編譯成純彙編語句,再將之彙編成跟cpu相關的二進位制碼,生成各         個目標檔案 (.obj檔案)

④連線階段,將各個目標檔案中的各段**進行絕對地址定位,生成跟特定平臺相關           的可執行檔案,當然,最後還可以用objcopy生成純二進位制碼,也就是去掉了檔案格         式信 息。(生成.exe檔案)

3.比方說 在aaa.h裡定義了一個函式的宣告,然後在aaa.

h的同一個目錄下建立aaa.c , aaa.c裡定義了這個函式的實現,然後是在main函式所在.

c檔案裡#include這個aaa.h  然後我就可以使用這個函式了。 main在執行時就會找到這個定義了這個函式的aaa.

c檔案。這是因為:main函式為標準c/c++的程式入口,編譯器會先找到該函式所在的檔案。

假定編譯程式編譯myproj.c(其中含main())時,發現它include了mylib.h(其中宣告瞭函式void test()),那麼此時編譯器將按照事先設定的路徑(include路徑列表及**檔案所在的路徑)查詢與之同名的實現檔案(副檔名為.

cpp或.c,此例中為mylib.c),如果找到該檔案,並在其中找到該函式(此例中為void test())的實現**,則繼續編譯;如果在指定目錄找不到實現檔案,或者在該檔案及後續的各include檔案中未找到實現**,則返回一個編譯錯誤.

其實include的過程完全可以「看成」是一個檔案拼接的過程,將宣告和實現分別寫在標頭檔案及c檔案中,或者將二者同時寫在標頭檔案中,理論上沒有本質的區別。以上是所謂動態方式。對於靜態方式,基本所有的c/c++編譯器都支援一種連結方式被稱為static link,即所謂靜態連結。

在這種方式下,我們所要做的,就是寫出包含函式,類等等宣告的標頭檔案(a.h,b.h,...

),以及他們對應的實現檔案(a.cpp,b.cpp,...

),編譯程式會將其編譯為靜態的庫檔案(a.lib,b.lib,...

)。在隨後的**重用過程中,我們只需要提供相應的標頭檔案(.h)和相應的庫檔案(.

lib),就可以使用過去的**了。相對動態方式而言,靜態方式的好處是實現**的隱蔽性,即c++中提倡的「介面對外,實現**不可見」。有利於庫檔案的**.

visual studio 中的標頭檔案、原始檔和資原始檔都是什麼?有什麼區別??

4樓:匿名使用者

標頭檔案:字尾為.h,主要是定義和宣告之類的,比如類的定義,常量定義原始檔:

字尾.cpp,主要是實現之類的,比如類方法的實現資原始檔主要是你用到的一些程式**以外的東西,比如**之類,或者選單、工具欄之類的定義之類

在visual c++6.0中,工程(project,也叫專案)是應用程式開發的基本單位。

工程的實質是一些相關聯的原始檔的集合,可以把專案理解成一個工作任務,使用者的工作都是圍繞這一任務的。工程最後經過編譯、連結生成可執行檔案(或其他部件,如動態連結庫dll)。在visual c++6.

0開發環境中,可以通過工作區間視窗(workspace)中,一個工作區可以管理多個工程,在visual c++6.0整合開發環境中,可以通過工作區視窗管理和維護其下的工程。在新建一個工程中,可以選擇為該工程新建一個工作區還是加入當前工作區。

用應用程式嚮導生成框架程式後,我們可以在之前設定的location下看到以解決方案名命名的資料夾,此資料夾中包含了幾個檔案和一個以工程名命名的子資料夾,這個子資料夾中又包含了若干個檔案和一個res資料夾,建立工程時的選項不同,工程資料夾下的檔案可能也會有所不同。

如果已經以debug方式編譯連結過程式,則會在解決方案資料夾下和工程子資料夾下各有一個名為「debug」的資料夾,而如果是release方式編譯則會有名為「release」的資料夾。這兩種編譯方式將產生兩種不同版本的可執行程式:debug版本和release版本。

debug版本的可執行檔案中包含了用於除錯的資訊和**,而release版本則沒有除錯資訊,不能進行除錯,但可執行檔案比較小。

我將所有檔案分為6個部分:解決方案相關檔案、工程相關檔案、應用程式標頭檔案和原始檔、資原始檔、預編譯標頭檔案和編譯連結生成檔案

c語言中標頭檔案和原始檔寫法有什麼區別?

c++中原始檔與標頭檔案有哪些不同點與聯絡?

c語言中的標頭檔案是什麼概念,c語言標頭檔案的是幹什麼用的?

標頭檔案是你程式中需要用到東西,如需要某個數學函式,則必須包括數學相關標頭檔案,如math.h,當然,也可以自己寫函式,只要你不怕麻煩!標頭檔案是你程式中需要用到東西,如需要某個數學函式,則必須包括數學相關標頭檔案,如math.h,當然,也可以自己寫函式,只要你不怕麻煩!標頭檔案就是在你所編制的程式...

c語言寫標頭檔案定義巨集的問題,C語言寫標頭檔案定義巨集的問題

兔子和小強 ifndef a h define a h endif 就是如果沒有定義a h那麼就定義a h,並執行.這樣就避免了重複include的問題。標頭檔案叫file 那麼一般 ifndef file h 這是c的風格,也可以取一個唯一的其他識別符號 預編譯 內的防止重複編譯就是這樣做的,比如...

C語言標頭檔案,conio h,windows h,string h,math h各有什麼用

conio.h,windows.h不是標準庫的string.h math.h是標準庫中的string.h主要提供處理字串的一些函式math.h主要提供一些數學函式 windows.h提供windows程式設計的介面,標頭檔案等conio.h 提供控制檯輸入輸出的一些函式 c語言,conio.h 標頭...