抄錄備忘:
其實(shí)沒有.h也能很好的工作,但是當(dāng)你發(fā)現(xiàn)一個(gè)外部鏈接的函數(shù)或外部變量,需要許多份
聲明,因?yàn)閏++這種語(yǔ)言,在使用函數(shù)和變量的時(shí)候,必須將他聲明,為何要聲明?聲明之后才
知道他的規(guī)格,才能更好的發(fā)現(xiàn)不和規(guī)格的部分.你別妄想一個(gè)編譯單元,會(huì)自動(dòng)從另一個(gè)
編譯單元那里得到什么信息,知道你是如何定義這個(gè)函數(shù)的.
所以說(shuō),只要使用到該函數(shù)的單元,就必須寫一份聲明在那個(gè).cpp里面,這樣是不是很麻煩,
而且,如果要修改,就必須一個(gè)一個(gè)修改.這真讓人受不了.
.h就是為了解決這個(gè)問題而誕生,他包含了這些公共的東西.然后所有需要使用該函數(shù)的.cpp,只需要
用#include包含進(jìn)去便可.以后需要修改,也只是修改一份內(nèi)容.
請(qǐng)注意不要濫用.h,.h里面不要寫代碼,.h不是.cpp的倉(cāng)庫(kù),什么都塞到里面.
如果在里面寫代碼,當(dāng)其他.cpp包含他的時(shí)候,就會(huì)出現(xiàn)重復(fù)定義的情況,
比如將函數(shù)func(){printf};放到頭文件a.h,里面還有一些a.cpp需要的聲明等;
然后你發(fā)現(xiàn)b.cpp需要用到a.cpp里面的一個(gè)函數(shù),就很高興的將a.h包含進(jìn)來(lái).
注意,#include并不是什么申請(qǐng)指令,他就是將指定的文件的內(nèi)容,原封不動(dòng)的拷貝
進(jìn)來(lái).
這時(shí)候?qū)嶋H上a.cpp和b.cpp都有一個(gè)func()函數(shù)的定義.
如果這個(gè)函數(shù)是內(nèi)部鏈接static的話,還好,浪費(fèi)了一倍空間;
如果是extern,外部鏈接(這個(gè)是默認(rèn)情況),那么根據(jù)在同一個(gè)程序內(nèi)不可出現(xiàn)
同名函數(shù)的要求,連接器會(huì)毫不留情給你一個(gè)連接錯(cuò)誤!
http://www.cnblogs.com/shelvenn/archive/2008/02/02/1062446.html