一.例1
test.h
void show();
test.cpp
#include using namespace std;
void show()
includeproblem.cpp
#include "test.h"
int main()
可以看到:
includeproblem.cpp檔案彙總#include 「test.h」 這句話的作用相當於將test.h在此處展開,即:void show();
而test.h檔案這裡只是show()函式的宣告,我們將定義放在了test.cpp中,並且不需要包含test.h這個標頭檔案也可以。
於是在編譯的時候,編譯器在編譯單元includeproblem.cpp看到了main()中show()的呼叫,卻沒有找到實現,編譯器就會到其他的編譯單元中尋找,最終在
test.cpp檔案中找到了實現,於是就可以鏈結到呼叫處,成功編譯。
二.例2
pimp.h
class pimp
;
test.h
class pimp;
class test
;
test.cpp
#include "test.h"
includeproblem.cpp
#include "test.h"
int main()
這樣test.cpp和includeproblem.cpp 都包含了 test.h,只要test.h中的內容一經修改,就會導致這兩個.cpp重新編譯.
但是pimp.h中的修改,卻不會導致這兩個.cpp重新編譯,因為我們在test.h使用了:pimp類宣告+pimp類指標變數。避免了這個問題。
如果我們在test.h中修改如下:
#include "pimp.h"
class test
;
如此,當pimp.h變化時,這兩個cpp都要重新編譯。 標頭檔案和原始檔的區別
一 原始檔如何根據 include來關聯標頭檔案 1,系統自帶的標頭檔案用尖括號括起來,這樣編譯器會在系統檔案目錄下查詢。include 2,使用者自定義的檔案用雙引號括起來,編譯器首先會在使用者目錄下查詢,然後在到c 安裝目錄 比如vc中可以指定和修改庫檔案查詢路徑,unix和linux中可以通過...
標頭檔案和原始檔的區別
一 原始檔如何根據 include來關聯標頭檔案 1,系統自帶的標頭檔案用尖括號括起來,這樣編譯器會在系統檔案目錄下查詢。include 2,使用者自定義的檔案用雙引號括起來,編譯器首先會在使用者目錄下查詢,然後在到c 安裝目錄 比如vc中可以指定和修改庫檔案查詢路徑,unix和linux中可以通過...
標頭檔案和原始檔的區別
一 原始檔如何根據 include來關聯標頭檔案 1,系統自帶的標頭檔案用尖括號括起來,這樣編譯器會在系統檔案目錄下查詢。include2,使用者自定義的檔案用雙引號括起來,編譯器首先會在使用者目錄下查詢,然後在到c 安裝目錄 比如vc中可以指定和修改庫檔案查詢路徑,unix和linux中可以通過環...