• C语言的静态局部变量和静态函数


    C语言的静态局部变量和静态函数

    在我看来,使用静态全局变量与普通的全局变量没有什么特别的优点,所以本文就不讨论静态全局变量。


    静态局部变量

    在定义局部变量前加上static关键词,则此变量就添加了静态属性。

    静态局部变量有以下特性:

    • 静态局部变量被分配到全局数据区,在函数结束后,对应的静态局部变量不释放。
    • 静态局部变量只在第一个定义时进行初始化,后续多次使用均忽略初始化。

    因为其具有上述特性,所以可以应用在某些情况来代替全部变量:

    某些情况下,我们需要多次调用某函数时对变量进行保存和更新。我们通常的做法是建立一个全局变量来实现,但是这样在某些情况下不太合理,因为这样此变量就脱离了函数本身,变成了一个全局可访问的变量。

    而使用静态局部变量就能既保证变量是局部的特性,又能实现多次调用保存值的特性。


    talk is cheap, show me the code:

    #include "main.h"
    #include <stdio.h>
    #include <stdlib.h>
    
    void func(void)
    {
        static int s_value = 1;
        s_value++;
    
        printf("s_value = %d\r\n",s_value);
    }
    
    int main(void )
    {
        func();
        /* do something */   
        func();
        return 0;
    }
    

    运行结果:

    ubuntu@006:~/wangl/sample-static$ ./test-static 
    s_value = 2
    s_value = 3
    

    静态函数

    在函数返回值的前面加上static关键字,函数被定义为静态函数。

    静态函数的特性是它只能在声明它的文件中使用。

    也就是说,即使你include了某个header,你也不能调用其中的静态函数。

    静态函数可以有效地保护函数不能被外部调用。

  • 相关阅读:
    matlab关闭文件
    matlab字符串比较
    matlab画直线
    已解决:TeamViewer使用的设备数量上限
    ubuntu安装teamviewer,缺少依赖处理
    木心的话
    SQL 语句中 where 条件后 写上1=1 是什么意思
    NetCore获取当前请求URL的方法
    NetCore3.1 日志组件 Nlog的使用
    Mysql并发时经典常见的死锁原因及解决方法
  • 原文地址:https://www.cnblogs.com/bluettt/p/15079497.html
Copyright © 2020-2023  润新知