C语言Static 关键字解析

目录
  • 01简述
  • 02static关键字作用

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.

这里注意两点:

  • 局部静态量的作用于仍然有改变,仍然在数内部有效
  • 局部静态变量存储位置变为了内存,不再存储在栈里

作用二:在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

这样定义的变量也称为全局静态变量:在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。也就是上述作用二中提到的在模块内(但在函数体外)声明的静态变量。

定义全局静态变量的好处:

  • 它的作用域只在这个文件中,不会被其他文件所访问,修改,是一个本地的局部变量。
  • 其他文件中可以使用相同名字的变量,不会发生冲突。

作用三:在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

这样定义的函数也成为静态函数:在函数的返回类型前加上关键字static,函数就被定义成为静态函数。

定义静态函数的好处:

  • 其他文件中可以定义相同名字的函数,不会发生冲突
  • 静态函数不能被其他文件所用。它定义一个本地的函数。

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关键字的好处,对于函数封装有好处,当你需要将一个功能函数封装起来,达到直接拷贝走这个函数就能用的程度,这个时候需要一个全部变量,这个时候在函数里面定义一个静态局部变量。

到此这篇关于C语言Static 关键字解析的文章就介绍到这了,更多相关Static 关键字内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解C语言中的Static关键字

    一.static关键字的基本含义 首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型 1.局部变量:在任意一个函数内部定义的变量(不加static),初始值不确定,出函数自动销毁,存放于栈区. 使用static修饰这个变量时,编译器会把她初始化为零,存储于静态区,函数返回时值保持不变,出函数不销毁,下一次进入函数依然存在.根本原因——static修饰的局部变量存储在静态区. 2.全局变量 :普通全局变量定义在函数体外部,在静态区分配存储空间,编译器自动对

  • 深度理解C语言中的关键字static

    目录 一.函数和变量的多文件问题 1.1.为什么全局变量和函数需要跨文件访问 二.static修饰变量和函数 2.1.static修饰全局变量 2.2.static修饰局部变量 2.3.为什么局部变量具有临时性,全局变量具有全局性 总结 一.函数和变量的多文件问题 .h: 头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header) .c : 源文件,一般包含函数实现,变量定义等 (.c:c语言) 如果在一个源文件定义一个函数,然后再另一个源文件调用,这样的方式可行吗? 答案是可行的

  • C语言入门篇--关键字static详解

    目录 1.修饰局部变量 1.1作用 1.2举例 (1)不加static (2)加static (3)静态局部变量的初始化只会进行一次 2.修饰全局变量 2.1作用 2.2举例 (1)不加static (2)加static 3.修饰函数 3.1作用 3.2举例 (1)不加static (2)加static 1.修饰局部变量 1.1作用 ststic修饰局部变量,会改变局部变量的生命周期,不改变作用域: 生命周期:和全局变量一样具有全局性,但在内存中的位置没有改变,还在在静态存储区中. 作用域:作用

  • c语言static关键字用法详解

    目录 1.static修饰全局变量 2.static修饰函数 3.static修饰局部变量 总结: 1.static修饰全局变量 我们创建两个源文件,一个test.c,一个main.c 现在我们在test.c文件下定义一个全局变量 int g_val = 100; 我们在main.c下进行调用打印g_val我们能访问到g_val吗? 答案是可以的 如果给g_val加上static修饰我们还能再main.c下访问到吗? static int g_val = 100; 这时候答案是不行的! 因此我们

  • 快速了解C语言静态关键字static的作用

    静态关键字static C语言中,static关键字修饰变量和函数 1.局部变量 2.全局变量 3.函数 修饰局部变量 1.用静态关键字static修饰的局部变量,在编译的过程中,会在数据区为该变量开辟空间,并对其进行初始化,如果代码中未对其进行初始化,则系统默认初始化为0 2.用static修饰的局部变量,会延长局部变量的寿命,超出函数的生存期 3.对静态关键字修饰的局部变量的初始化 以下面两个变量a和变量为b进行说明,在编译过程中,发现变量a和b是静态变量,会标识变量a与b,等到程序运行的时

  • C语言Static 关键字解析

    目录 01简述 02static关键字作用 01简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. void test1(void) {     unsigned char a:     static unsigned char b:     -     a++:     b++: } 在这个例子中,变量a是局部变量,变量b为局部静态变量.作用一说明了局部静态变量b的特性:在函数体,一个被声明为静态的变量

  • 一文搞懂C语言static关键字的三个作用

    目录 static修饰局部变量 static 修饰全局变量 static 修饰函数 总结 static修饰局部变量 图一:test 函数里面定义的 a 是局部变量,局部变量在栈区上开辟空间,栈区的使用特点是进入变量的生命周期时自动为其开辟空间,离开变量的生命周期时自动销毁对应空间,所以这里每次调用 test 函数时 a 都会被重新定义并初始化为0,所以屏幕上打印的是10个1: 图二:我们把 a 用 static 修饰后发现屏幕打印的是1到10,就好像每次调用完 test 函数后 a 并没有被销毁

  • 全面了解C语言 static 关键字

    目录 一,前言 二.认识多文件 1.多文件的创建 2.为什么要有多文件 3.为什么要有头文件 4.多文件在代码中的具体体现 三.最名不符实的关键字 - static 1.static 修饰局部变量 2.static修饰全局变量 3.static修饰函数 四.总结 一,前言 大家好,欢迎来到C语言深度解析专栏—关键字详解第二篇,在本篇中我们将会对static关键字进行详细介绍,其中要求我们掌握我上一篇中所讲到的全局变量.局部变量.作用域以及生命周期的相关概念,如果对这几个概念比较模糊的同学可以先移

  • Java中的static关键字全面解析

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin05

  • 解析Java中的static关键字

    一.static关键字使用场景 static关键字主要有以下5个使用场景: 1.1.静态变量 把一个变量声明为静态变量通常基于以下三个目的: 作为共享变量使用 减少对象的创建 保留唯一副本 第一种比较容易理解,由于static变量在内存中只会存在一个副本,所以其可以作为共享变量使用,比如要定义一个全局配置.进行全局计数.如: public class CarConstants { // 全局配置,一般全局配置会和final一起配合使用, 作为共享变量 public static final in

  • Java static关键字详细解析

    目录 static目的 static范围 静态(static)修饰 静态变量 静态方法 静态代码块 静态类 static变量存储在方法区(Method Area) static目的 java中的static关键字主要用于内存管理. static范围 使用范围:java static关键字可以用在变量.方法.代码块和嵌套类中. 作用范围:static关键字属于类,而不是类的实例. 静态(static)修饰 变量.方法:称为类变量/方法.静态变量/方法:修饰变量或方法,表示这个变量/方法属于这个类,

  • Java类中this关键字与static关键字的用法解析

    目录 前言 1:修饰属性,表示调用类中的成员变量. 2:this修饰方法 3:this表示当前对象的引用 前言 今天给大家总结介绍一下Java类中this关键字和static关键字的用法. this关键字用法: this.属性可以调用类中的成员变量 this()可以调用类中的构造方法 1:修饰属性,表示调用类中的成员变量. 代码示例: public class Student { public String name; public int age; public String school;

  • java之static关键字用法实例解析

    本文实例讲述了java中static关键字用法,分享给大家供大家参考.具体分析如下: 一.介绍: 1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份. 2.用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static成员.(静态方法不再是针对于某个对象调用,所以不能访问非静态成员) 3.可以通过对象引用或类名(不需要实例化)访问静态

随机推荐