C中extern和C 中的export

2021-06-16 11:31:57 字數 889 閱讀 1300

為了訪問其他編譯單元(如另一**檔案)中的變數或物件,對普通型別(包括基本資料類、結構和類),可以利用關鍵字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...