抄錄備忘:
其實沒有.h也能很好的工作,但是當你發現一個外部鏈接的函數或外部變量,需要許多份

聲明,因為c++這種語言,在使用函數和變量的時候,必須將他聲明,為何要聲明?聲明之后才

知道他的規格,才能更好的發現不和規格的部分.你別妄想一個編譯單元,會自動從另一個

編譯單元那里得到什么信息,知道你是如何定義這個函數的.

    所以說,只要使用到該函數的單元,就必須寫一份聲明在那個.cpp里面,這樣是不是很麻煩,

而且,如果要修改,就必須一個一個修改.這真讓人受不了.


.h就是為了解決這個問題而誕生,他包含了這些公共的東西.然后所有需要使用該函數的.cpp,只需要

用#include包含進去便可.以后需要修改,也只是修改一份內容.


請注意不要濫用.h,.h里面不要寫代碼,.h不是.cpp的倉庫,什么都塞到里面.

如果在里面寫代碼,當其他.cpp包含他的時候,就會出現重復定義的情況,

比如將函數func(){printf};放到頭文件a.h,里面還有一些a.cpp需要的聲明等;

然后你發現b.cpp需要用到a.cpp里面的一個函數,就很高興的將a.h包含進來.

注意,#include并不是什么申請指令,他就是將指定的文件的內容,原封不動的拷貝

進來.


這時候實際上a.cpp和b.cpp都有一個func()函數的定義.

如果這個函數是內部鏈接static的話,還好,浪費了一倍空間;

如果是extern,外部鏈接(這個是默認情況),那么根據在同一個程序內不可出現

同名函數的要求,連接器會毫不留情給你一個連接錯誤!

http://www.cnblogs.com/shelvenn/archive/2008/02/02/1062446.html





西津渡