C语言中的static关键字非常简单,简单到你的任何项目都不需要写static关键字,也没有问题。写这一章主要是写自己对静态的理解和应用。当然,在本章的开头,我还是要根据脚本简单描述一下static关键字。01简介static关键字在嵌入式C语言中非常简单。它具有三个功能:功能一:在函数体中,声明为static的变量在函数调用期间保持其值不变。voidtest1(void){unsignedchara;静态无符号字符b;...一个++;b++;}在此示例中,变量a是局部变量,变量b是局部静态变量。函数1说明了局部静态变量b的特点:在函数体中,声明为static的变量(即局部静态变量)在函数调用过程中保持其值不变。这时候的作用就和全局变量一样了。下面这个简单的例子声明了一个函数的局部变量,并将其设置为静态类型作为计数器,这样函数每次被调用时都可以进行计数。这种统计方法很好,因为其他函数可以修改这个变量(程序跑飞除外)。voidcount();intmain(){inti;对于(i=1;i<=3;i++){count();{return0;}voidcount(){staticnum=0;数++;printf("Ihavebeencalled%d",num,"times/n");}输出结果为:Ihavebeencalled1times。我被叫了2次。我被叫了3次。这里注意两点:局部静态变量的作用还是变了,有效的局部静态变量在数据中的存储位置变到内存中,不再存储在栈中。关于局部静态变量的存储,不懂的同学移步上一篇《C语言在STM32中的内存分配》。功能2:在模块中(但在函数体之外),声明为static的变量可以被模块内使用的函数访问,但不能被模块外的其他函数访问。它是一个局部全局变量。这样定义的变量也称为全局静态变量:在全局变量前加上关键字static,全局变量定义为全局静态变量。即上面第二个函数中提到的在模块中(但在函数体之外)声明的静态变量。定义一个全局静态变量的好处是:它的作用域只在本文件中,不会被其他文件访问和修改,是局部变量。同名变量可以在其他文件中使用而不会发生冲突。函数3:在一个模块中,声明为static的函数只能被本模块中的其他函数调用。也就是说,该函数被限制在声明它的模块的局部范围内。这样定义的函数也变成了静态函数:在函数的返回类型前加上关键字static,函数就被定义为静态函数。定义静态函数的好处:可以在其他文件中定义同名函数,不会有冲突。其他文件不能使用静态函数。它定义了一个局部函数。02让我们多谈谈。上面说了static关键字很简单,基本上是为了代码模块化。相当长一段时间,我在工作中基本上没有使用static关键字。在单片机的代码中,一般一个人就可以管理整个代码工程,所以我没有大量使用static关键字。是的,static关键字很简单,主要是为了代码模块化。相当长一段时间,我在工作中基本上没有使用static关键字。在单片机的代码中,一般一个人就可以管理整个代码工程,所以我没有大量使用static关键字。上一篇《STM32“隐藏的定时器”-DWT》中测量代码运行时间的代码如下:floatDTW_Time_Difference_ms(void){staticuint32_told_counter;uint32_t计数器,couter_current;couter_current=DWT_TS_GET();如果(couter_current>old_counter)counter=couter_current-old_counter;else=couter_current+0XFFFFFFFF-old_counter;old_counter=couter_current;return(counter/(SystemCoreClock/1000));}使用了static关键字,我也体会到了使用static关键字的好处,有利于函数封装。当你需要对一个功能函数进行封装,可以通过复制函数直接使用的程度。这时候就需要一个完整的变量。这时候在函数中定义了一个静态的局部变量。本文转载自微信?《知乎编程》,可通过以下二维码关注。转载本文请联系知编程公众号。
