• 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,你也不能调用其中的静态函数。

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

  • 相关阅读:
    Java实现 LeetCode 69 x的平方根
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 66 加一
    Java实现 LeetCode 66 加一
    CxSkinButton按钮皮肤类
  • 原文地址:https://www.cnblogs.com/bluettt/p/15079497.html
Copyright © 2020-2023  润新知