C 靜態全域性變數問題

2021-10-23 16:09:48 字數 915 閱讀 4930

c++中,在檔案中,類外,宣告乙個非靜態變數,這個就是全域性變數,它的作用域是全域性的,鏈結時個編譯單元一起

c++中,在檔案中,類外,宣告乙個靜態變數,這個就是靜態全域性變數,作用域是編譯單元,因此同乙個全域性靜態變數鏈結時不會報重複鏈結錯誤

#pragma once

#includeclass myclass

;std::vectorg_vec; //全域性變數,被多個檔案包含會鏈結錯誤【重複的符號】

static std::vectorgs_vec; //靜態全域性變數,被多個檔案包含時,每個檔案中乙個例項

全域性變數的正確用法:

方式一,宣告中使用extern

1,標頭檔案中宣告, myclass.h

#pragma once

#includeclass myclass

;extern std::vectorg_vec;

2,任意cpp中定義: myclass.cpp

#include //#include "myheader.h"

std::vectorg_vec;

3,#include"myclass.h"後使用

#include "myclass.h"

int main()

方式二,使用時用extern

1,標頭檔案中宣告, myclass.h

#pragma once

#includeclass myclass

;std::vectorg_vec;

2, extern  後使用,不需要#include"myclass.h"

extern std::vectorg_vec;
int main()

c 全域性變數 靜態全域性變數

全域性變數是靜態儲存方式,靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。區別 雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。靜態區域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能...

C 全域性變數 靜態全域性變數 靜態區域性變數

全域性變數儲存在靜態儲存區,其作用域是全域性作用域,生命週期是整個程式的生命週期。具體而言,在乙個檔案中定義乙個全域性變數,在程式的其它檔案中可以通過extern關鍵字再次宣告說明該變數已經定義。靜態全域性變數儲存在靜態儲存區,其作用域只能是定義該變數的檔案,生命週期是整個程式的生命週期。靜態區域性...

C 靜態全域性變數與普通全域性變數

一 儲存區域 1 棧 由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區域。通常儲存區域性變數,函式引數。2 堆 由new分配的記憶體塊,需要手動釋放。如果程式設計師沒有手動釋放,在程式執行結束後,作業系統自動 3 自由儲存區 由malloc等分配的記憶體塊,與堆相似,用free來釋放。...