VS2017 C 全域性變數 函式的使用

2021-10-23 20:48:28 字數 1118 閱讀 3439

假設有三個原始檔分別是a.h、b.cpp、c.cpp。

a.h是標頭檔案,其中宣告了三個變數var1、var2、var3。

b.cpp是a.h中所宣告的類的實現源**c.cpp是主程式檔案

b.cpp和c.cpp中均包含標頭檔案 a.h。在編譯時,編譯能夠通過,但鏈結時出了問題,出現」error   lnk1169:   找到乙個或多個多重定義的符號「的錯誤。

經過分析,確定了這是由於兩個實現檔案中重複包含了標頭檔案而造成的。可解決方法卻始終找不到。要 注意的是,在這裡,在標頭檔案中加入#ifndef……#endif這樣的預編譯命令是沒用的,因為這是防止巢狀包含標頭檔案的,而本例中並沒有巢狀包含,是 在兩個檔案中分別包含。因為這三個變數在兩個實現檔案中都要用到,所以一定要包含在a.h中。

a.h中的三個變數宣告前加上extern 關鍵字,然後在b.cpp中不加extern關鍵字再次宣告這三個變數。於是編譯鏈結順利通過。其實這是c++中比較基礎的問題。這就是全域性變數的使用方法,要使用extern關鍵字。

補充:還有種情況是定義了函式,但在另個檔案中準備用#include開啟,但是結果還是會出現。

在a.cpp中定義了乙個函式

void func()
希望在b.cpp中呼叫呼叫前就需要進行宣告,格式如下:

extren void func(); 

void mian()

在a.cpp中定義了乙個變數  int a;

如果要在b.cpp中使用,使用前就需要進行宣告,格式如下:

extren int a; 

void main()

總結:extern可以表示全域性函式或者全域性變數的。

javer學c 全域性函式, 全域性變數

extern 全域性c c 中函式預設就是全域性的,變數寫在函式外的話預設也是全域性的.global.cpp,定義乙個全域性變數和乙個全域性函式 c include using namespace std int g int 10 void globalmethod 全域性函式的宣告需要使用exte...

VS2017 C 讀取Txt資料的方法

目錄 1.這裡採用fopen s 函式開啟檔案。2.對一些有規範格式檔案的讀取,可使用標準庫stdio.h下的fscanf s函式。3.如讀取檔案data.txt 資料格式相對規範 與程式 外的資料 檔案 打交道,我們使用到流 stream 這個概念,實現程序的虛擬記憶體與檔案之間的資料交換。檔案流...

C 靜態全域性變數和全域性變數的區別

靜態全域性變數 非靜態全域性變數 儲存方式 靜態儲存 靜態儲存 作用域定義該變數的原始檔內 所有原始檔 解釋 共同點 全域性變數 外部變數 的說明之前再冠以static 就構 成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。不同點...