#include到底該寫在哪

來源:互聯網
上載者:User

1. 大學學C/C++的時候,大家寫.h檔案的時候,發現有符號這個檔案裡沒有,就會#include相關的頭一下;寫.cpp檔案的時候,發現有符號這個檔案裡沒有也會#include一下,一直沒有出什麼問題。

 

2. 再晚些知道了#include是先行編譯,就是copy一個檔案的全部內容到當前#include語句的位置而已,而編譯器根本不去編譯.h,以及他裡面到底是啥。

 

然後隔了很久沒用C/C++做很較複雜的程式,直到今天……封裝整個DirectDrawManager的時候,我SB了。

 

我想:“反正.h不去編譯,我就把.cpp和.h裡面要用的符號的#include語句都寫在.cpp裡,然後在這些#include的下面來#include 自己.h不就行了麼。這樣會先把相關的標記法宣告都載入進來,然後粘貼上我的.h檔案,那麼編譯時間,也不會出錯,而且這樣我感覺一下子對#include了哪些頭非常清楚,因為都在.cpp裡了,.h裡啥也不#include。”

 

接著我編譯了上面這種的.cpp檔案,成功,哇好爽!

然後我build整個項目,一共好幾百個錯誤,哇好爽!

 

SB的我想:“.cpp過了啊,而且沒有未定義與重複定義呀?!難道我記錯了…….h也要檢查不成?!”

於是將所有在.cpp裡#include的語句都放在了自己的.h檔案裡(除了#include "自己.h"),build成功!

 

哈哈哈,果然是我記錯了!

 

SB!我從腦後突然傳來一個下意識的聲音~“先行編譯就是先行編譯,怎麼TMD可能去檢查.h!你就是個SB,還美呢!”

 

為了不被自己的良心譴責,我繼續嘗試修改各種方式,終於,我發現了自己的SB之處,也可以給出了本文標題的答案。

 

#include就是拷貝一塊檔案進來,在.cpp裡面寫這個類相關的頭的#include,這個.cpp是沒問題了,可關鍵是其他用這個類的檔案,如果#include這個類的標頭檔,但是因為這個類的標頭檔裡沒有引用這個標頭檔相關的其他類的標頭檔,就會在編譯使用者時出現找不到符號的錯誤。

 

所以在.h裡有依賴性的符號,就應該在.h裡#include的,在.cpp裡有依賴性的符號,就在.cpp裡寫#include。
這樣當#include拷貝一塊檔案過來時,才會將相關依賴的符號也都拷貝進來。

 

自我檢討完畢!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.