為什麼要有標頭檔案?

時間 2021-05-30 02:28:18

1樓:黃達

為什麼要有標頭檔案?黃達:為什麼C/C++要分為標頭檔案和原始檔?

能不能用.c自動生成標頭檔案?如果你想寫在這個.h裡的全部資訊都在這個.c裡,那就能,否則就不能(廢話)。所以多數情況下是不能。

2樓:劉文麟

題主的意思就是為什麼不能在正式編譯開始之間增加乙個過程:掃瞄所有.c檔案,然後把其中的函式定義都找出來,生成統一的乙個宣告檔案,以後編譯每個.

c檔案的時候都依賴這個檔案就可以了。

這樣做當然是可以的,但是C語言不是「現代」計算機語言,他出現的太早了,那個時代想做這樣的掃瞄無論是儲存空間還是運算能力都還不太夠,通過.h/.c手動的把宣告和實現分開來解決問題是個非常簡單有效的辦法,再說C本身被設計成為乙個多平台的語言,因此即使在今天也要考慮一些資源和運算能力低下的平台需求,那就更沒有修改的必要了。

3樓:王飛

其實自己寫的話,是用不著標頭檔案這個東西的,但是別人給你的,你要沒有標頭檔案,你都不知道怎麼用,API 定義是什麼。要是遇到兩個庫裡面符號名一樣的你更麻煩,

比如規範說,x86_64 64bit 模式下,棧要 16byte 對其,整形,指標從 rdi 開始乙個傳乙個,但是要是都是自己的東西,你愛對齊就對齊不對齊也無所謂,你用 rdi rsi 傳倆 int32_t 引數也行,你用 rdi 傳倆 int32_t 也行,沒人攔著你,

4樓:

有些商用庫,只提供.lib庫檔案。首先,你為了呼叫這些庫,必須知道介面定義,這是標頭檔案的作用之一(當然,更多時候你是通過對方提供的文件來呼叫)。

更重要的是,沒有標頭檔案,你將無法進行連線,這是需要標頭檔案的根本原因。如果是自己程式設計序,在規模大到一定程度之前,其實可以用不著定義標頭檔案這麼麻煩。

5樓:馮東

C 採用區域性編譯。編譯器同一時間只能處理乙個 C 檔案。但是 linker 需要這些 C 檔案遵循一些協議才能保證連線成功(比如全域性變數名相同,函式呼叫和函式定義的引數對應)。

這些 linker 需要的 cross-file 的資訊就要寫到 header 中。

當然,有些 cross-file 資訊也不是 linker 直接使用的,比如某些巨集定義和常量定義。但我認為那是順勢而為。

6樓:微子

cproto.sourceforge.net/可以自動生成標頭檔案.

以python為例說不需要標頭檔案是合適的, python執行時需要所有的檔案.

標頭檔案一般是介面宣告. 大部分語言, 從設計上, 在模組化時都需要一定的宣告, 有的叫標頭檔案, 有的叫存根. 沒有宣告, 幾個模組能夠協作, 那一般是協作協議足夠複雜, 能夠自舉所有的情況.

這明顯不適合在底層系統級程式設計情況下.

7樓:黃浩

你當然可以把頭檔案的內容直接寫到.c裡面去,但是當你把你的庫提供別人的時候,你還是要寫乙個新的.h檔案,否則別人無法知道介面的定義~

8樓:陳灝

標頭檔案主要用於一些型別的宣告(函式、類或者結構體等),這些宣告用於編譯時的型別識別。當.c/.

cpp原始檔需要用到這些型別時,只需要包含相應的標頭檔案,就通過編譯,得到.o目標檔案再進行鏈結。如果宣告改變只需要修改標頭檔案,不需要多處修改包含它的原始檔。

為什麼c 要「在標頭檔案中宣告,在原始檔中定義」?

Coder 為什麼不推薦在標頭檔案中定義函式或者變數呢,只建議在標頭檔案中宣告變數和函式.要記住,每當你用乙個 include的時候,你就是把那個標頭檔案的內容搬到 include的位置 pragma once的作用是 在同乙個檔案中多次include同乙個標頭檔案的時候,保證該標頭檔案內容只被替換...

c 能否把所有要用的標頭檔案在某乙個標頭檔案中全inlcude了,然後其他檔案只用include這個

qugx0528 每個cpp都是乙個編譯單元,編譯時生成多個obj檔案,在link的時候,也會極大的拖慢速度。有這麼一種情況,我有乙個很大的UI介面,其對應的實現 操作類也很龐大,我想把他們分解到多個cpp實現中。這樣就產生了這麼乙個問題 代表ui的標頭檔案會在每個cpp中被include一次,這樣...

為什麼C 中,含有函式宣告的標頭檔案應該被包含在定義函式的原始檔中?

如果,你在second.cpp裡面的function 1 裡呼叫了function 2 就會編譯不通過。並且,會提示你找不到function 2的定義。要不你試一下呢? 大JoeJoe 在實際的專案程式設計中 cpp檔案中定義的函式分為兩種,一種是對外提供介面供外部呼叫的,一種是特定功能封裝成乙個函...