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 指向的物件可變...