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...