const 和全域性變數

2021-07-09 02:13:57 字數 1193 閱讀 8748

c++中,全域性變數的儲存都是靜態儲存。但是鏈結性質可以有外部鏈結和內部鏈結。預設情況下是外部鏈結,如果在定義前加上 static ,則變為內部鏈結。

如果 int val1 = 5; 加上static ,則編譯失敗。但是如果是用const  呢。變成 const  int val1 = 5;會如何呢,

答案是,也編譯失敗。

file2.obj鏈結的時候找不到val1。說明const  修飾的全域性變數 會跟static 修飾一樣,變數具有內部鏈結性質。

如果我們非要讓全域性常量具有外部鏈結性質。則需要加上extern 。

extern const int val1 = 5;

在file2.cpp宣告

如果我們的常量是定義在標頭檔案中,標頭檔案被多個cpp檔案包含呢。新建乙個header.h檔案

const int val1 = 5;

const int val2 = 100;

file1.cpp和file2.cpp分別包含header.h。

我們發現,輸出的位址值是不一樣的。說明每個cpp都有乙份常量的定義,而不是共享一組常量。

C 靜態變數 全域性變數 const

全域性陣列 不能被delete 作用域 區分名字的不同意義的上下文。c 中大多數作用域是用花括號界定的,名字從其宣告點到宣告所在作用域結束處都是可見的。include int main int sum 0 for int val 1 val 10 val sum return 1 名字main在花括...

const全域性變數位於哪個段

方法 1 設計若干個const全域性變數的例子,用g 編譯生成可執行檔案 例如a.out 2 用readelf s a.out 檢視elf檔案各段的資訊 3 用objdump s a.out檢視main函式反彙編,確定呼叫的位址 4 根據呼叫的位址和2中查單到的段資訊,確定呼叫的位址位於哪個段 5 ...

static全域性變數 全域性變數

1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...