成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊簡單的 Static 關鍵字

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

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

01簡述

static關鍵字在嵌入式C語言當中很簡單,它有三個作用:

作用一:在函數體,一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變。

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

a++
b++
}


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

下面簡單的例子,聲明函數的一個局部變量,并設為static類型,作為一個計數器,這樣函數每次被調用的時候就可以進行計數。這個統計的方法是很好的,因為其他函數能修改這個變量(程序跑飛除外)。

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.


這里注意兩點:

局部靜態量的作用于仍然有改變,仍然在數內部有效

局部靜態變量存儲位置變為了內存,不再存儲在棧里

關于局部靜態變量存儲的問題,不太懂的同學移步之前文章《C語言在STM32中的內存分配》。

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

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

定義全局靜態變量的好處:

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

作用三:在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。

這樣定義的函數也成為靜態函數:在函數的返回類型前加上關鍵字static,函數就被定義成為靜態函數。

定義靜態函數的好處:

  • 其他文件中可以定義相同名字的函數,不會發生沖突
  • 靜態函數不能被其他文件所用。它定義一個本地的函數。

02多聊一些

對于上面講到的,static關鍵字很簡單,基本就是為了代碼模塊化。在相當一段時間內,我在工作中基本沒有用到static關鍵字,在單片機的代碼中,一般情況下一個人可以管理整個代碼工程,所以并沒有大量使用static關鍵字。的,static關鍵字很簡單,基本就是為了代碼模塊化。在相當一段時間內,我在工作中基本沒有用到static關鍵字,在單片機的代碼中,一般情況下一個人可以管理整個代碼工程,所以并沒有大量使用static關鍵字。

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

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關鍵字的好處,對于函數封裝有好處,當你需要將一個功能函數封裝起來,達到直接拷貝走這個函數就能用的程度,這個時候需要一個全部變量,這個時候在函數里面定義一個靜態局部變量。

本文轉載自微信公眾號「知曉編程」,可以通過以下二維碼關注。轉載本文請聯系知曉編程公眾號。

責任編輯:武曉燕 來源: 知曉編程
相關推薦

2021-02-01 13:10:07

Staticc語言UNIX系統

2020-12-09 05:19:35

static關鍵字Java

2011-07-14 23:14:42

C++static

2010-02-02 14:27:54

C++ static關

2023-03-09 07:38:58

static關鍵字狀態

2024-04-08 11:35:34

C++static關鍵字

2009-06-25 10:33:53

StaticJava類

2015-11-10 16:10:22

C語言StaticConst

2009-09-07 18:53:46

static關鍵字

2011-04-21 16:57:56

staticextern

2009-10-15 15:43:25

VB.NET Pati

2024-02-26 10:36:59

C++開發關鍵字

2022-05-06 08:32:40

Pythonwith代碼

2025-01-09 10:30:40

2024-03-15 15:12:27

關鍵字底層代碼

2022-11-12 18:32:50

Golangomitemptyjson

2023-11-28 21:50:39

finalstaticvolatile

2009-09-17 09:30:00

Linq LET關鍵字

2022-01-04 16:35:42

C++Protected關鍵字

2012-03-01 12:50:03

Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av香蕉| av天天爽| 欧美一区免费在线观看 | 九九99久久 | 久久久精品一区 | 日韩在线免费 | 美女国产一区 | 亚洲精品乱码久久久久久久久久 | 无人区国产成人久久三区 | 一区二区三区四区在线视频 | 国产精品久久久久免费 | 91精品国产99 | 欧美成人性生活 | 美女天天干天天操 | 蜜桃精品视频在线 | 成人黄色在线 | 亚洲自拍一区在线观看 | 国产欧美精品在线 | 亚洲免费精品 | 在线观看你懂的网站 | av在线播放国产 | 成人小视频在线 | 成人免费淫片aa视频免费 | 99精品视频一区二区三区 | 久久国产精品免费一区二区三区 | 亚洲国产精品成人综合久久久 | 日日操操| 亚洲精品第一 | www.天天操 | 女人牲交视频一级毛片 | 日韩一区二区三区在线 | 午夜激情一区 | 精产国产伦理一二三区 | 国产精品久久久久久一区二区三区 | 国产女人与拘做受免费视频 | 成人欧美一区二区三区白人 | 国产精品国产三级国产aⅴ中文 | 久久久国产一区二区三区 | 色又黄又爽网站www久久 | 亚洲资源站 | 黄色片网站在线观看 |