c 中extern用來宣告全域性變數

2021-06-18 22:18:21 字數 1687 閱讀 6341

宣告:在某個標頭檔案1.h(可以在同一檔案中或同一程式的不同檔案中出現多次 );

定義:在任何乙個原始檔x.cpp(只能定義一次!#include<1.h>) ;

使用:要使用這個全域性變數,只要包含1.h就行了。

在全域性域中定義的物件 如果沒有指定顯式的初始值 則該儲存區被初始化為 0 因此下面兩個定義中 var1和 var2有相同的初始值 0

int var1 = 0;

int var2;

關鍵字extern為宣告但不定義乙個物件提供了一種方法 實際上它類似於函式宣告承諾了該物件會在其他地方被定義 或者在此文字檔案中的其他地方 或者在程式的其他文字檔案中 例如

extern int i;

對程式來說是乙個 保證 表示在其他某個地方存在乙個如下所示的定義

int i;

extern宣告不會引起記憶體被分配 它可以在同一檔案中或同一程式的不同檔案中出現多次 典型情況下 全域性物件的宣告只在公共的標頭檔案中出現一次

當乙個程式檔案需要引用這個全域性物件時 它可以包含這個標頭檔案

// 標頭檔案

extern int obj1;

extern int obj2;

// 文字檔案

int obj1 = 97;

int obj2;

既指定了關鍵字 extern 又指定了乙個顯式初始值的全域性物件宣告將被視為該物件的定義 編譯器將會為其分配儲存區 而且該物件後續的定義都被標記為錯誤 例如

extern const double pi = 3.1416; // 定義

const double pi; // 錯誤: 重複定義 pi

關鍵字 extern也可以在函式宣告中指定 惟一的影響是將該宣告的隱式屬性 在其他地方定義 變為顯式的 這樣的宣告有下列形式

extern void putvalues( int*, int )

一般是在乙個原始檔如1.cpp裡定義變數, 如 cstring str;(這是定義,只能有乙個定義)

在其他檔案中要用使用時,可以在標頭檔案如1.h裡宣告: extern cstring str;(宣告,可以有多處),然後include 「1.h」就行了,不用再定義,否則定義重複,也可以不用宣告;include 「1.h」中已經宣告。

例如:-----------------------------------------

1.h  原始碼:

extern cstring str;//這是宣告,表示這個變數在其他檔案裡有定義,這裡是1.cpp.一定要有個檔案裡有它的定義。

……------------------------------------------

1.cpp  原始碼:

include 「1.h」

……cstring str;  // 定義

……-----------------------------------------

2.cpp  原始碼

include 「1.h」  // 宣告了變數cstring str,並且在 1.cpp裡定義了

str = "……";    // 直接使用,include 「1.h」中已經宣告。

-----------------------------------------

.h檔案  裡若沒有extern ,表示定義;

.cpp檔案裡有相同定義就是重複定義了;

.h檔案裡加了extern 後,表示宣告,要有地方有它的定義(實現)。

C 中的extern宣告變數詳解

extern宣告變數無外乎如下兩種 1 宣告全域性變數 2 宣告函式 今天我們只談extern,什麼const static之類等等與之相關或不相關的一律忽略,下面就分別對以上兩種情況一一講解 宣告和定義 既然提到extern宣告變數,那我們就必須搞清楚宣告和定義的區別。這裡我們將普通資料變數和函式...

c 變數宣告extern說明

當使用extern關鍵字修飾變數 未初始化 表示變數宣告。當在另乙個檔案中,為extern關鍵字修飾的變數賦值時,表示變數定義。宣告在標頭檔案裡面,定義的檔案裡面包含有該宣告的標頭檔案。header.件如下 ifndef header h define header h 定義global x變數 在...

C語言extern宣告辨析

1 基本解釋 extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告...