自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊簡單的 Static 關(guān)鍵字

開發(fā) 前端
C語言中staic關(guān)鍵字很簡單,簡單到你的任何一個(gè)項(xiàng)目中可以不寫一個(gè)staic關(guān)鍵字也是沒有問題的。寫這篇章主要是一下自己的staic的理解和應(yīng)用,當(dāng)然在章開頭依舊要照本宣科簡述一下static關(guān)鍵字。

C語言中staic關(guān)鍵字很簡單,簡單到你的任何一個(gè)項(xiàng)目中可以不寫一個(gè)staic關(guān)鍵字也是沒有問題的。寫這篇章主要是一下自己的staic的理解和應(yīng)用,當(dāng)然在章開頭依舊要照本宣科簡述一下static關(guān)鍵字。

01簡述

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

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

void test1(void)
{
unsigned char a;
static unsigned char b;

a++
b++;
}


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

下面簡單的例子,聲明函數(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ǔ)在棧里

關(guān)于局部靜態(tài)變量存儲(chǔ)的問題,不太懂的同學(xué)移步之前文章《C語言在STM32中的內(nèi)存分配》。

作用二:在模塊內(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ù)。

02多聊一些

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

在之前的文章《STM32“隱藏的定時(shí)器”-DWT》測量代碼運(yùn)行時(shí)間的代碼如下:

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ù)封裝起來,達(dá)到直接拷貝走這個(gè)函數(shù)就能用的程度,這個(gè)時(shí)候需要一個(gè)全部變量,這個(gè)時(shí)候在函數(shù)里面定義一個(gè)靜態(tài)局部變量。

本文轉(zhuǎn)載自微信公眾號(hào)「知曉編程」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系知曉編程公眾號(hào)。

責(zé)任編輯:武曉燕 來源: 知曉編程
相關(guān)推薦

2021-02-01 13:10:07

Staticc語言UNIX系統(tǒng)

2011-07-14 23:14:42

C++static

2020-12-09 05:19:35

static關(guān)鍵字Java

2010-02-02 14:27:54

C++ static關(guān)

2023-03-09 07:38:58

static關(guān)鍵字狀態(tài)

2009-06-25 10:33:53

StaticJava類

2024-04-08 11:35:34

C++static關(guān)鍵字

2015-11-10 16:10:22

C語言StaticConst

2009-09-07 18:53:46

static關(guān)鍵字

2011-04-21 16:57:56

staticextern

2009-10-15 15:43:25

VB.NET Pati

2024-02-26 10:36:59

C++開發(fā)關(guān)鍵字

2023-11-28 21:50:39

finalstaticvolatile

2022-05-06 08:32:40

Pythonwith代碼

2025-01-09 10:30:40

2024-03-15 15:12:27

關(guān)鍵字底層代碼

2022-11-12 18:32:50

Golangomitemptyjson

2009-09-02 09:24:03

C# this關(guān)鍵字

2009-09-17 09:30:00

Linq LET關(guān)鍵字

2012-03-01 12:50:03

Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)