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

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

posted @   cnwanglu  阅读(802)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示