在開發過程中,我們經常會需要定義一些static類型的變量或者函數,我們接下來來具體聊一下static;
1、修飾變量
當static來修飾一個變量時,就注定了這個變量的可見范圍和生命周期;
(1)當修飾全局變量時
static int flag1 = 0;
int flag2 = 0;
這兩個變量存儲在全局數據區,flag1只在本文件可見,其他文件中不可見;flag2可在其他文件中通過聲明extern int flag2來使用;
(2)當修飾局部變量時
void fun(void){
static int temp1;
int temp2 = 0;
......................
return;
}
函數中,temp1為局部靜態變量,存儲在全局數據區,temp2為局部變量,存儲在棧上;但是隨著函數的退出,temp2的生命周期也就結束,但是temp1依然有效,只不 過可見范圍為本函數內,下次再次進入本函數時,對temp1的任何修改都是在上次修改的基礎上進行,也就是說temp1有記憶性。
2、修飾函數
static修飾的函數主要是在本文件中使用的函數,不對外提供,Linux內核中的任何文件中都有此類型的靜態函數;
static inline void enable_noirq(void){
................
}
使用static修飾函數的好處就是,所有文件可以定義同名的函數,不用考慮重名導致的編譯報錯;