欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言Static?關(guān)鍵字解析

 更新時(shí)間:2022年02月17日 17:27:19   作者:Firefly  
這篇文章主要介紹了C語(yǔ)言Static?關(guān)鍵字解析,C語(yǔ)言中staic關(guān)鍵字很簡(jiǎn)單,簡(jiǎn)單到你的任何一個(gè)項(xiàng)目中可以不寫一個(gè)staic關(guān)鍵字也是沒有問題的。寫這篇章主要是一下自己的staic的理解和應(yīng)用,當(dāng)然在章開頭依舊要照本宣科簡(jiǎn)述一下static關(guān)鍵字,需要的朋友可以參考一下

01簡(jiǎn)述

static關(guān)鍵字在嵌入式C語(yǔ)言當(dāng)中很簡(jiǎn)單,它有三個(gè)作用:

作用一:在函數(shù)體,一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過(guò)程中維持其值不變。

void test1(void)
{
? ? unsigned char a;
? ? static unsigned char b;
? ? …
? ? a++;
? ? b++;
}

在這個(gè)例子中,變量a是局部變量,變量b為局部靜態(tài)變量。作用一說(shuō)明了局部靜態(tài)變量b的特性:在函數(shù)體,一個(gè)被聲明為靜態(tài)的變量(也就是局部靜態(tài)變量)在這一函數(shù)被調(diào)用過(guò)程中維持其值不變。這個(gè)時(shí)候作用和全局變量是同的。

下面簡(jiǎn)單的例子,聲明函數(shù)的一個(gè)局部變量,并設(shè)為static類型,作為一個(gè)計(jì)數(shù)器,這樣函數(shù)每次被調(diào)用的時(shí)候就可以進(jìn)行計(jì)數(shù)。這個(gè)統(tǒng)計(jì)的方法是很好的,因?yàn)槠渌瘮?shù)能修改這個(gè)變量(程序跑飛除外)。

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");
}

輸出結(jié)果為:

I have been called 1 times.
I have been called 2 times.
I have been called 3 times.

這里注意兩點(diǎn):

  • 局部靜態(tài)量的作用于仍然有改變,仍然在數(shù)內(nèi)部有效
  • 局部靜態(tài)變量存儲(chǔ)位置變?yōu)榱藘?nèi)存,不再存儲(chǔ)在棧里

作用二:在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問。它是一個(gè)本地的全局變量。

這樣定義的變量也稱為全局靜態(tài)變量:在全局變量之前加上關(guān)鍵字static,全局變量就被定義成為一個(gè)全局靜態(tài)變量。也就是上述作用二中提到的在模塊內(nèi)(但在函數(shù)體外)聲明的靜態(tài)變量。

定義全局靜態(tài)變量的好處:

  • 它的作用域只在這個(gè)文件中,不會(huì)被其他文件所訪問,修改,是一個(gè)本地的局部變量。
  • 其他文件中可以使用相同名字的變量,不會(huì)發(fā)生沖突。

作用三:在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個(gè)函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。

這樣定義的函數(shù)也成為靜態(tài)函數(shù):在函數(shù)的返回類型前加上關(guān)鍵字static,函數(shù)就被定義成為靜態(tài)函數(shù)。

定義靜態(tài)函數(shù)的好處:

  • 其他文件中可以定義相同名字的函數(shù),不會(huì)發(fā)生沖突
  • 靜態(tài)函數(shù)不能被其他文件所用。它定義一個(gè)本地的函數(shù)。

02static關(guān)鍵字作用

對(duì)于上面講到的,static關(guān)鍵字很簡(jiǎn)單,基本就是為了代碼模塊化。在相當(dāng)一段時(shí)間內(nèi),我在工作中基本沒有用到static關(guān)鍵字,在單片機(jī)的代碼中,一般情況下一個(gè)人可以管理整個(gè)代碼工程,所以并沒有大量使用static關(guān)鍵字。的,static關(guān)鍵字很簡(jiǎn)單,基本就是為了代碼模塊化。在相當(dāng)一段時(shí)間內(nèi),我在工作中基本沒有用到static關(guān)鍵字,在單片機(jī)的代碼中,一般情況下一個(gè)人可以管理整個(gè)代碼工程,所以并沒有大量使用static關(guān)鍵字。

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關(guān)鍵字,我也體會(huì)到了使用static關(guān)鍵字的好處,對(duì)于函數(shù)封裝有好處,當(dāng)你需要將一個(gè)功能函數(shù)封裝起來(lái),達(dá)到直接拷貝走這個(gè)函數(shù)就能用的程度,這個(gè)時(shí)候需要一個(gè)全部變量,這個(gè)時(shí)候在函數(shù)里面定義一個(gè)靜態(tài)局部變量。

到此這篇關(guān)于C語(yǔ)言Static 關(guān)鍵字解析的文章就介紹到這了,更多相關(guān)Static 關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenCV實(shí)現(xiàn)馬賽克功能

    OpenCV實(shí)現(xiàn)馬賽克功能

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)馬賽克功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++實(shí)現(xiàn)Dijkstra算法

    C++實(shí)現(xiàn)Dijkstra算法

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)Dijkstra算法完整代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • vscode配置遠(yuǎn)程開發(fā)環(huán)境并遠(yuǎn)程調(diào)試運(yùn)行C++代碼的教程

    vscode配置遠(yuǎn)程開發(fā)環(huán)境并遠(yuǎn)程調(diào)試運(yùn)行C++代碼的教程

    這篇文章主要介紹了vscode配置遠(yuǎn)程開發(fā)環(huán)境并遠(yuǎn)程調(diào)試運(yùn)行C++代碼的教程,本文通過(guò)截圖實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C/C++ProtoBuf使用小結(jié)

    C/C++ProtoBuf使用小結(jié)

    ProtoBuf全稱:protocol buffers,直譯過(guò)來(lái)是:“協(xié)議緩沖區(qū)”,是一種與語(yǔ)言無(wú)關(guān)、與平臺(tái)無(wú)關(guān)的可擴(kuò)展機(jī)制,用于序列化結(jié)構(gòu)化數(shù)據(jù),這篇文章主要介紹了C/C++ProtoBuf使用,需要的朋友可以參考下
    2024-01-01
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解

    C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解

    這篇文章主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存分配的詳解的相關(guān)資料,這里提供了實(shí)現(xiàn)方法整理和出現(xiàn)錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2017-07-07
  • 詳解Matlab中自帶的Java操作合集

    詳解Matlab中自帶的Java操作合集

    其實(shí)Matlab中也有一些自帶的Java操作,例如:獲取鼠標(biāo)在全屏位置、獲取當(dāng)前剪切板內(nèi)容、獲取鼠標(biāo)處像素顏色等,本文總結(jié)了七個(gè)這樣的操作,感興趣的可以了解一下
    2022-03-03
  • vscode不同項(xiàng)目使用不同的插件的實(shí)現(xiàn)

    vscode不同項(xiàng)目使用不同的插件的實(shí)現(xiàn)

    本文主要介紹了vscode不同項(xiàng)目使用不同的插件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C++ const的使用及this指針常方法(面試最愛問的this指針)

    C++ const的使用及this指針常方法(面試最愛問的this指針)

    這篇文章主要介紹了C++ const的使用,this指針,常方法(面試最愛問的this指針),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 深入剖析C語(yǔ)言中qsort函數(shù)的實(shí)現(xiàn)原理

    深入剖析C語(yǔ)言中qsort函數(shù)的實(shí)現(xiàn)原理

    這篇文章主要介紹了C語(yǔ)言中qsort函數(shù)的實(shí)現(xiàn)原理,本文將從回調(diào)函數(shù),qsort函數(shù)的應(yīng)用,qsort函數(shù)的實(shí)現(xiàn)原理三個(gè)方面進(jìn)行講解,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • C語(yǔ)言學(xué)習(xí)基礎(chǔ)知識(shí)分享

    C語(yǔ)言學(xué)習(xí)基礎(chǔ)知識(shí)分享

    這篇文章主要介紹了C語(yǔ)言學(xué)習(xí)基礎(chǔ)知識(shí)分享的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評(píng)論