C 多檔案間函式呼叫及全域性變數共享問題

2021-08-04 17:53:09 字數 1673 閱讀 4852

涉及extern識別符號宣告:

在.h檔案中不要定義變數,通常為宣告變數,定義變數會出現「error lnk2005: 已經在 .obj 中定義」類似這樣的錯誤。根據c++規定,變數的宣告必須同時滿足兩個條件:(1)宣告必須使用extern關鍵字;(2)不能給變數賦初值
例:

extern int a; //宣告

int a; //定義

int a = 0; //定義

extern int a = 0; //定義

在「.h」檔案中將可共享函式前加上extern

例:單個cpp程式

void initdata(); //具體定義在對應原始檔中
多個cpp程式

extern void initdata(); //具體定義在對應原始檔中
單個cpp程式

int counum = 0; 

unsigned char commandlen = 0;

多個cpp程式

「.h」檔案中宣告

extern int counum; 

extern unsigned char commandlen;

「.cpp」檔案中定義及初始化

extern int counum = 0; 

extern unsigned char commandlen = 0;

* 普通陣列 *

單個cpp程式

int counum[5];
多個cpp程式

「.h」檔案中宣告(注意陣列[ ]內不標長度)

extern int counum;
「.cpp」檔案中定義及初始化

extern int counum[5] = ;
* 結構體陣列 *

單個cpp程式

typedef struct cluster clu; 

clu clu_data[10];

多個cpp程式

「.h」檔案中宣告(注意陣列[ ]內不標長度)

typedef struct cluster clu; //標頭檔案中定義結構體

extern clu clu_data; //宣告結構體陣列

「.cpp」檔案中定義(其他原始檔只要包含」.h」檔案即可使用全域性變數)

clu clu_data[10];
另外注意若在全域性變數定義所在原始檔使用static識別符號,則該變數只在當前cpp內有效。標頭檔案不會進行編譯,當在標頭檔案裡使用static識別符號時只在包含該標頭檔案的.cpp檔案進行編譯時使用static定義

C語言全域性變數多檔案使用

c語言全域性變數多檔案使用 定義乙個全域性變數,想在多個檔案中使用,如下 externintvar include var.h intvar 10 include var.h include var.h include var.h 只能在乙個檔案裡面賦初值,否則鏈結出錯。看到個c的題 全域性變數可不...

C 全域性變數建構函式的呼叫

c 是不能在全域性scope裡寫表示式,原來一直以為指令的執行都是在main函式裡的.但c 裡可以呼叫類的建構函式對類初始化.建構函式顯然不能是在main函式裡呼叫,那在什麼時候呼叫呢?是在一段叫做init的 段裡.linux的elf可執行檔案格式分為若干段 elf可執行檔案格式 elf heade...

多檔案共享全域性變數和函式 原創

在乙個檔案中定義的變數和函式如何能被其他檔案使用,不會出現多重定義和未定義的編譯錯誤,這要使用好標頭檔案和關鍵字extern。大家都知道extern是宣告外部變數的時候使用的,而函式宣告預設就是extern的。如果在乙個檔案中定義乙個變數a,int a 那麼只有本檔案可以使用a變數,其他的檔案看不到...