C extern static修飾變數的作用域

2021-09-26 14:48:20 字數 1371 閱讀 3027

extern用來宣告外部變數,具體看**

編寫兩個.c檔案

t_1.c檔案**如下

#include

int i=5;

void

print()

t_2.c檔案**如下

#include

extern

int i;

extern

void

print()

;int

main()

在linux環境下使用gcc -o test t_1.c t_2.c編譯後生成可執行檔案test,使用./test執行,輸出

5

hello,world!

這說明在乙個檔案中,使用extern來修飾某個變數或函式時,可以不在該檔案中定義它具體的內容,編譯時會從其它檔案中找到extern變數。

用這種方式宣告並沒有建立變數或為他們分配單元,同時外部變數的初始化只能出現在其定義中.

例如我們在t_2.c中初始化i的值就會報錯

當我們同時編譯t_1.c t_2.c時,t_2.c就可以使用t_1.c裡面的變涼了,就算在t_2.c中沒有初始化也可以執行。

限定作用域

當我們不希望乙個變數在別的檔案被訪問時,我們可以在使用static來宣告變數。

用static宣告限定外部變數和函式,可以將其後宣告的物件的作用域限定為被編譯檔案的剩餘部分(tcpl原話)

把t_1.c的**新增兩個static

#include

static

int i=5;

static

void

print()

繼續執行編譯,報錯了,說明static限定了i和print的作用域

函式內部的static

這個用得比較少,看**

#include

void

fun(

)int

main()

此時time只能在fun內部使用,但是不管fun函式是否被呼叫,time將一直存在,不同於函式的內部變數會隨著函式的呼叫和退出而存在和消失。換句話說,static型別的內部變數是一種只能在某個特定函式中使用但一直佔據儲存空間的變數。

const修飾指標與修飾常量

1.const 修飾指標 常量指標 eg const int p a 特點 指標的指向可以修改,但是指標指向的值不能修改 int a 10 int b 20 int p a p 20 錯誤 p b 正確 2.const 修飾常量 指標常量 eg int const p a 特點 指標的指向不能修改,...

final修飾變數 與Stastic修飾的變數

一 final修飾變數 final可以修飾成員變數,也可以修飾區域性變數 形參。final變數一旦獲得初始值之後,final的變數就不能被重新賦值。成員變數是隨類初始化或物件初始化而初始化的,當執行靜態初始化塊時候可以對類屬性進行賦初始值,當執行普通初始化塊或者構造器的時候可以對例項屬性賦初始值。因...

可以修飾類的修飾符

外部類只能被public 預設訪問許可權 即default abstract final修飾,不能被private和protect修飾。原因 成員內部類和靜態內部類可以被public 預設訪問許可權 即default private protect abstract final修飾。這些修飾符只能修...