C語言Static?關鍵字解析
01簡述
static關鍵字在嵌入式C語言當中很簡單,它有三個作用:
作用一:在函數體,一個被聲明為靜態(tài)的變量在這一函數被調用過程中維持其值不變。
void test1(void) { ? ? unsigned char a; ? ? static unsigned char b; ? ? … ? ? a++; ? ? b++; }
在這個例子中,變量a是局部變量,變量b為局部靜態(tài)變量。作用一說明了局部靜態(tài)變量b的特性:在函數體,一個被聲明為靜態(tài)的變量(也就是局部靜態(tài)變量)在這一函數被調用過程中維持其值不變。這個時候作用和全局變量是同的。
下面簡單的例子,聲明函數的一個局部變量,并設為static
類型,作為一個計數器,這樣函數每次被調用的時候就可以進行計數。這個統(tǒng)計的方法是很好的,因為其他函數能修改這個變量(程序跑飛除外)。
void count(); int main() { ? ? int i; ? ? for (i = 1; i <= 3; i++) ? ? { ? ? ? ? count(); ? ? { ? ? ?return 0; } void count() { ? ? static num = 0; ? ? num++; ? ? printf(" I have been called %d",num,"times/n"); }
輸出結果為:
I have been called 1 times.
I have been called 2 times.
I have been called 3 times.
這里注意兩點:
- 局部靜態(tài)量的作用于仍然有改變,仍然在數內部有效
- 局部靜態(tài)變量存儲位置變?yōu)榱藘却妫辉俅鎯υ跅@?/li>
作用二:在模塊內(但在函數體外),一個被聲明為靜態(tài)的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。
這樣定義的變量也稱為全局靜態(tài)變量:在全局變量之前加上關鍵字static,全局變量就被定義成為一個全局靜態(tài)變量。也就是上述作用二中提到的在模塊內(但在函數體外)聲明的靜態(tài)變量。
定義全局靜態(tài)變量的好處:
- 它的作用域只在這個文件中,不會被其他文件所訪問,修改,是一個本地的局部變量。
- 其他文件中可以使用相同名字的變量,不會發(fā)生沖突。
作用三:在模塊內,一個被聲明為靜態(tài)的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。
這樣定義的函數也成為靜態(tài)函數:在函數的返回類型前加上關鍵字static,函數就被定義成為靜態(tài)函數。
定義靜態(tài)函數的好處:
- 其他文件中可以定義相同名字的函數,不會發(fā)生沖突
- 靜態(tài)函數不能被其他文件所用。它定義一個本地的函數。
02static關鍵字作用
對于上面講到的,static
關鍵字很簡單,基本就是為了代碼模塊化。在相當一段時間內,我在工作中基本沒有用到static關鍵字,在單片機的代碼中,一般情況下一個人可以管理整個代碼工程,所以并沒有大量使用static關鍵字。的,static關鍵字很簡單,基本就是為了代碼模塊化。在相當一段時間內,我在工作中基本沒有用到static關鍵字,在單片機的代碼中,一般情況下一個人可以管理整個代碼工程,所以并沒有大量使用static
關鍵字。
float DTW_Time_Difference_ms(void) { ? static uint32_t old_counter; ? uint32_t counter,couter_current; ? couter_current = DWT_TS_GET(); ? if(couter_current > old_counter) ? ? counter = couter_current - old_counter; ? else ? ? counter = couter_current + 0XFFFFFFFF - old_counter; ? old_counter = couter_current; ? return (counter / (SystemCoreClock/1000)); }
用到了static
關鍵字,我也體會到了使用static關鍵字的好處,對于函數封裝有好處,當你需要將一個功能函數封裝起來,達到直接拷貝走這個函數就能用的程度,這個時候需要一個全部變量,這個時候在函數里面定義一個靜態(tài)局部變量。
到此這篇關于C語言Static
關鍵字解析的文章就介紹到這了,更多相關Static 關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vscode配置遠程開發(fā)環(huán)境并遠程調試運行C++代碼的教程
這篇文章主要介紹了vscode配置遠程開發(fā)環(huán)境并遠程調試運行C++代碼的教程,本文通過截圖實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04C++ const的使用及this指針常方法(面試最愛問的this指針)
這篇文章主要介紹了C++ const的使用,this指針,常方法(面試最愛問的this指針),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04