說說C++的頭文件

     這次講講C++的頭文件吧,第一個問題是頭文件的內部到底是什麼?其實本質上來說頭文件是不存在,當程序在進行編譯的時候,其實第一步就把頭文件裏面所有的內容直接拷貝到源文件裏面去了,這樣頭文件其實就消失了。因爲這個拷貝就會導致了第二個問題,如果出現多重依賴的關係,會不會出現編譯不通過。答案是會的。比如a.h 定義了一個結構體 stUserInfo,b.h包含了a.h。然後a.cpp又同時包含了a.h和b.h,那麼結構體stUserInfo就會被多重定義編譯就會報錯。解決辦法一般是這樣的,在頭文件裏面加上如下的代碼:

以a.h爲例:

#ifndef _A_H

#define _A_H

typedef struct stUserInfo

{

……

}

#endif

這樣在就不會出現重複定義的問題了。其實還有一個需要注意的,一般注重編程規範的公司是在代碼裏面是不允許.h再包含.h的。同樣.cpp包含其他的cpp更加不行。

最後說說很多頭文件咋在開始都會加上extern "C"{},其實這個的意思就是按照C語言的方式去編譯而不是C++的方式去編譯。因爲在編譯之後裏面的函數會被修改名字,比如 float f(int a,char b)在C++的編譯器裏面就會變成_f_int_char以來支持重載,但是在C裏面就會是_f。所以有這個的不一樣就是導致連接器無法鏈接到正確的函數。

好了,今天就到這裏吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章