C語言tips static 修飾符 生命的魔法棒

2021-10-09 23:28:39 字數 2549 閱讀 9357

static

英 [ˈstætɪk] 美 [ˈstætɪk]

adj. 靜止的;靜態的;停滯的;靜力的

n. 天電(干擾);靜電;靜力學

就像它的本意,static作為c語言關鍵字,主要的作用就是凍結區域性變數。區域性變數在函式完成使命消亡後,繼續存在,延長生命週期,下次繼續呼叫。

void static_test (

int time)

int

main

(int argc,

char

const

* ar**)

//輸出結果,區域性變數num的值,沒有發生變化。

1 time num value:

02 time num value:

03 time num value:

04 time num value:

05 time num value:

0

可以看出static_test函式中區域性變數num的值,沒有發生變化。num的值隨著static_test函式的結束一起陪葬(消亡)了。下一次呼叫static_test函式的時候,再重新給變數num分配空間。所以每次呼叫static_test函式,num都是新生的變數,值都是0。

void static_test (

int time)

int

main

(int argc,

char

const

* ar**)

//輸出結果,區域性變數num的值,發生變化。

1 time num value:

02 time num value:

13 time num value:

24 time num value:

35 time num value:

4

可以看出num的值隨著static_test函式的呼叫,依次遞增。static關鍵字延長了num的生命,不會隨著函式的結束而陪葬。只定義初始化一次,後面再次呼叫static_test函式時,會直接使用。但num的作用域沒有變化,依舊只能在static_test函式內使用,否則產生報錯。

int

main

(int argc,

char

const

* ar**)

//產生報錯,使用未宣告的變數。

hello.c:9:

31: error: use of undeclared identifier 'num'

printf

("the num value:%d"

,num);^

1 error generated.

標頭檔案,連線兩個.c原始檔。

#ifndef _test_h

#define _test_h

void

test_print

(int a)

;#endif

原始檔,實現函式。

#include

static

int a =12;

//用static來修飾全域性變數。

void

test_print

(int a)

原始檔,程式入口。

#include

#include

"test.h"

intmain

(int argc,

char

const

* ar**)

//產生鏈結錯誤。

undefined symbols for architecture x86_64:

"_a"

, referenced from:

_main in hello-dcdf68.o

ld:symbol

(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1

(use -v to see invocation)

可以看出,經過static修飾的全域性變數,只能在這個全域性變數只能在所定義的檔案內使用,其他檔案不能使用。當test.c檔案中去掉static關鍵字,就沒有問題了。

C語言 static修飾函式

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。下面是a...

C語言const的修飾

1.修飾變數 用const宣告乙個變數,其值是不可改變的,例如 const int dat dat 1 這是錯誤的,dat的值不可改變 對const變數只能在初始化的時候賦值,並且一旦賦值後其值不可改變,正確初始化const變數如下 const int dat 1 2.修飾指標 對於用const宣告...

C語言 const修飾指標解析

這種例子在我們平時程式設計時可能會很少用,但是在面試時被問的可能性就很大了。用const修飾指標,常見的情況可以分為四種 1.const int p p 可變,p 指向的物件不可變 2.int const p p 可變,p 指向的物件不可變 3.int const p p 不可變,p 指向的物件可變...