C語言或者C 語言標頭檔案的意義是什麼,現代編譯器能否把這個給優化掉?

時間 2021-05-09 10:19:43

1樓:乙個小機械人

emmm暫時沒學到標頭檔案的真正意義,只從個新手的角度說通常你可以寫個include來簡化標頭檔案。但這樣做就很容易會出現莫名其妙有時還很難察覺的歧義錯誤,題主認為該怎麼解決這樣的問題呢?

2樓:Kira

看了好幾個回答,都沒有回答到點上。可以看看我回答的另乙個類似的標頭檔案問題,裡面詳細講解了標頭檔案的意義:

作為乙個新手,如何了解標頭檔案的作用並合理的使用標頭檔案?

3樓:乙隻狗子

覺得麻煩的話,

不妨#include

其實編譯一遍是非常耗費時間的,特別是當你的專案有一堆.h .cpp的時候,所以可以使用makefile來進行輔助。

題目描述說的是呼叫函式的時候自動補齊標頭檔案嗎?

這個很多編譯器都能搞啊,只不過不是幫你自動填充上,而是在對應的函式下面畫條波浪線,提醒你要加相應的標頭檔案才能完成呼叫。這主要是因為C/C++標頭檔案非常豐富,IDE自己並不知道究竟要選哪個。

另外,題主應該知道物件導向程式設計吧。標頭檔案起了很好的封裝作用,給你個介面,你直接拿來用就好了,不必在乎裡面的具體實現。

4樓:lhelpme

module目的就是去掉這個

標頭檔案是為了在古代機器上實現編譯器,減少記憶體占用的明明可以編譯器分析,但是還是讓開發人員把需要使用的宣告單獨列出來,就是為了減少編譯器記憶體消耗

後來模板,巨集,header only 都是誤入歧途,積重難返了現代不需要方便機器了,也應該逐漸廢掉標頭檔案概念,巨集模板也作為原始檔來看待

5樓:hjiayz

我想這個問題問的是,標頭檔案(介面定義)為什麼要和實現分開。

從程式中提取介面定義,很多語言有工具。

介面定義生成的例子:

microsoft/dts-gen

至於標頭檔案有什麼用。

就拿函式來說吧。

函式有實現部分和定義部分。

呼叫者只需要知道定義就夠了,而實現者必須寫出實現。

標頭檔案就是給呼叫者看的定義部分。

6樓:章奇

C++20裡新引入的module了解一下

Bjarne Stroustrup 在 《A Tour of C++》中提到過,include的方法確實太老了,而且容易出錯,例如兩個標頭檔案的引用次順不同,結果就可能不同。而且引用標頭檔案的方法讓編譯器白白多了很多任務作量,導至編譯速度比較慢,特別是對大型工程專案而言。

所以他們又提出了新的方法,就是用module,在module是寫在CPP檔案中的,不受引用次序影響,只編譯一次,不會影響編譯速度。但是include還是可以使用的,而且很長一段時間都不會變。

7樓:NaN

因為C和C++每個原始檔是單獨編譯的,所以在編譯單個原始檔,或者說用C和C++的術語來說,編譯單元時,單個編譯單元並不知道其他編譯單元匯出的符號,所以需要某種方式列出這個編譯單元需要使用的外部符號及其型別。

那些將所有原始碼放在一起同時編譯的語言,同樣也允許定義外部符號,這些語言有時會把這樣定義的外部符號稱為ffi,但實際上其作用是和標頭檔案類似的。

至於能不能優化掉……編譯器又不知道你打算引用哪個外部庫的哪個外部符號,你不告訴它,它怎麼知道該怎麼做呢?

甚至類似的機制在某些相當高階的語言中是被保留的。比如typescript的d.ts。

8樓:pansz

這只是設計上的選擇,雖然新的現代語言大多都沒有標頭檔案機制。

標頭檔案完成了實現與介面的解耦:你的C程式在你根本不擁有目標庫的情況下就可以被正確編譯。

換句話說,在編譯階段,還根本沒有目標檔案的存在。只能通過標頭檔案來定位,沒有辦法通過目標檔案推導。

目標檔案是在鏈結階段才匯入的,此時編譯工作已經完成。

應該說,單獨維護標頭檔案確實使得C/C++相比許多現代語言顯得不方便,工程上存在弱勢。也減慢了C/C++的編譯速度。

然而標頭檔案依賴的預編譯體系也是C/C++高執行效率的原因之一,為了這個體系能夠達到的高效,在程式設計方便性作出了必要的犧牲。

簡要的結論:歷史原因,設計如此,現在也不好改了。這個特性有優點有缺點,因此就留存了下來。

要想實現題主所說的並不容易,如果未來能對C/C++標準做大幅度的修訂,有可能實現題主所說的方式。

不會英語能不能學C語言或者JAVA語言?

學無止境 沒問題,我剛學c的時候音標都不會,慢慢學這些程式語言一共也沒有多少個單詞,英語慢慢學,至於英文文件看不懂就看翻譯過來的,翻譯過來的有時候難以理解但知道他說的什麼意思就好,更何況現在各種教程滿天飛,不用看他的文件也學得會 Connor 那樣的話你就需要好好背那些庫函式之類的東西了,英語基礎實...

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

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

C語言,嘗試fopen 讀寫檔案為什麼會引發下面的「應用程式錯誤」?

Hippop 給樓主推薦乙個好玩的,FILE f fopen C ab fseek f,0,0 手動打碼 w h i l e 1 f w r i t e x00 x00 x00 x00 1,4,f 分割線 阿秋 你試試這個 include int main FILE fp char c fp fop...