比如在乙個test.h檔案中有如下**:
#include
using namespace std;
int a = 1;
void printlog()
如果想要在另外乙個原始檔中使用這些全域性變數的話,需要首先用extern宣告一下在本檔案中使用的變數可以再其他模組中尋找到:
在main.c中這樣寫:
#include "main.h"
#include
using namespace std;
extern int a;
extern void printlog();
int main(void)
需要注意的是extern僅僅是宣告而已,不是定義,乙個變數只能夠定義一次,但是卻可以宣告多次。
此外還有extern "c"的用法,比如:
extern "c"
extern "c" 包含雙重含義,從字面上即可得到:首先,被它修飾的目標是「extern」的;其次,被它修飾的目標是「c」的。
第一種含義上面其實就是的,第二種含義就是:
被extern "c"修飾的變數和
函式是按照c語言方式編譯和連線的;
未加extern
「c」宣告時的
編譯方式
。首先看看c++中對類似c的
函式是怎樣編譯的。
作為一種
物件導向
的語言,c++支援
函式過載
,而過程式語言c則不支援。
函式被c++編譯後在符號庫中的名字與c語言的不同。例如,假設某個
函式的原型為:
void
foo( int x, int y );該函式
被c編譯器
編譯後在符號庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字(不同的編譯器可能生成的名字不同,但是都採用了相同的機制,生成的新名字稱為「mangled name」)。_foo_int_int這樣的名字包含了
函式名、函式引數數量及型別資訊,c++就是靠這種機制來實現
函式過載
的。例如,在c++中,
函式void
foo( int x, int y )與void foo( int x, float y )編譯生成的符號是不相同的,後者為_foo_int_float。
C C 中extern的用法
1 extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v的鏈結屬性必須是外鏈結 external 的,也就是說a.c要引用到v,不只是取決於在a.c中宣告extern ...
c c 中extern的作用
看一下下面這個程式 include using namespace std intmain 這個程式編譯是有問題的,因為你根本沒有寫add這個函式,編譯器會給你報錯。但是再看這個 include using namespace std extern intadd int a,int b int ma...
C C 中extern關鍵字用法詳解
extern用於在多個檔案中間中,定義乙個全域性變數或者函式。可以在其他檔案中使用 extern 來得到乙個已定義的變數或函式的引用。extern用於函式宣告時,和普通的函式宣告並沒有區別。即extern int foo 和int foo 是一樣的效果的。使用extern更多的是表示該函式在其他檔案...