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