用extern定義全域性變數

2021-07-31 12:46:07 字數 1022 閱讀 8890

**

1.extern的作用

2.例項:

以上已經說了extern的作用,下面我們來舉個例子,如: 

在test1.h中有下列宣告:

#ifndef test1h

#define test1h

extern char g_str; // 宣告全域性變數g_str

void fun1();

#endif

在test1.cpp中

#include "test1.h"

char g_str = "123456"; // 定義全域性變數g_str

void fun1()

以上是test1模組,它的編譯和連線都可以通過,如果我們還有test2模組也想使用g_str,只需要在原檔案中引用就可以了

#include "test1.h"

然後把test1.cpp中的g_str的定義去掉,這個時候再編譯連線test1和test2兩個模組時,會報連線錯誤,這是因為你把全域性變數 g_str的定義放在了標頭檔案之後,test1.cpp這個模組包含了test1.h所以定義了一次g_str,而 test2.cpp也包含了test1.h所以再一次定義了g_str, 這個時候聯結器在連線test1和test2時發現兩個g_str。如果你非要把g_str的定義放在test1.h中的話,那麼就把test2的**中#include "test1.h"去掉 換成:

extern char g_str;

void fun2()

這個時候編譯器就知道g_str是引自於外部的乙個編譯模組了,不會在本模組中再重複定義乙個出來,但是我想說這樣做非常糟糕,因為你由於無法在 test2.cpp中使用#include "test1.h", 那麼test1.h中宣告的其他函式你也無法使用了,除非也用都用extern修飾,這樣的話你光宣告的函式就要一大串,而且標頭檔案的作用就是要給外部提供介面使用的,所以請記住, 只在標頭檔案中做宣告,真理總是這麼簡單。

用extern定義全域性變數

1.extern的作用 2.例項 以上已經說了extern的作用,下面我們來舉個例子,如 在test1.h中有下列宣告 ifndef test1h define test1h extern char g str 宣告全域性變數g str void fun1 endif 在test1.cpp中 inc...

VC 定義全域性變數及extern用法

基本解釋 extern可以置於變數或者函式前,以標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。此外extern也可用來進行鏈結指定。vc定義全域性變數及extern用法 全域性變數一般這樣定義 1。在一類的.cpp中定義 int myint 然後再在要用到的...

1 全域性變數extern 總結

extern全域性變數 1.標頭檔案說明 標頭檔案一般存放變數 函式的宣告 區別宣告和定義 因為標頭檔案可能會被多個原始檔引用 此處非乙個ifndef的乙個標頭檔案被二次包涵 假如將定義放入標頭檔案,標頭檔案被多個原始檔引用就會對變數 函式的重定義錯誤。ps 變數 函式只能定義一次,永遠不要在標頭檔...