為了訪問其他編譯單元(如另一**檔案)中的變數或物件,對普通型別(包括基本資料類、結構和類),可以利用關鍵字extern,來使用這些變數或物件時;但是對模板型別,則必須在定義這些模板類物件和模板函式時,使用標準c++新增加的關鍵字export(匯出/出口/輸出)。例如:
extern int n;
extern struct point p;
extern class a a;
export template class stack s;
export template void f (t& t)
一般是在標頭檔案中給出類的定義或全域性函式的宣告資訊,而在**檔案中給出具體的(類成員函式或全域性函式的)函式定義。然後在多個使用者**檔案中包含該標頭檔案後,就可以使用其中定義或宣告的類和函式。標頭檔案中一般不包含變數、結構和類物件的定義,因為這樣可能會導致重複定義的編譯錯誤。解決辦法是,在某個**檔案中進行定義,在其他使用者**檔案中用extern來引用它們。
但是對模板型別,則可以在標頭檔案中,宣告模板類和模板函式;在**檔案中,使用關鍵字export來定義具體的模板類物件和模板函式;然後在其他使用者**檔案中,包含宣告標頭檔案後,就可以使用該這些物件和函式了。例如:
// out.h:(宣告標頭檔案——只包含out函式的宣告資訊)
template void out (const t& t);
// out.cpp:(定義**檔案——包含out函式的宣告[通過include]和定義等全部資訊)
#include
#include 「out.h」
export template void out (const t& t)
使用者**檔案——包含函式的宣告標頭檔案後就可以使用該函式)
#include 「out.h」
// 使用out()
C中的static和extern總結
我們知道,c語言中沒有類的概念,都是以檔案為單位組織的。對於非區域性變數和函式,只能在唯一的乙個c檔案中定義一次,多檔案同時定義就會導致編譯器報重複定義的錯誤。而為了能在其他c 檔案中使用這些非區域性變數和函式,就有了extern關鍵字。同時,為了檔案的 隔離,有些變數和函式不想被其他檔案訪問,就有...
C 中extern 的用法
前段時間看了extern 的用法,今天試了一下出現了如下問題,我在乙個標頭檔案1中定義了全域性常量,然後在標頭檔案2中定義了同樣的全域性變數,然後把兩個標頭檔案包含在另外乙個cpp裡面出現了了重新定義的錯誤,去掉頭檔案2中的全域性定義,undeclared identifier 的錯誤。最後把2中的...
C 中extern的使用
來自 1.宣告外部實體 宣告外部全域性變數或物件,一般用於標頭檔案中,表示在其它編譯單元內定義的變數,鏈結時進行外部鏈結,如 1.宣告外部實體 宣告外部全域性變數或物件,一般用於標頭檔案中,表示在其它編譯單元內定義的變數,鏈結時進行外部鏈結,如 extern int ivalue 此時的extern...