在C语言中,static有以下几种用法:
1. 修饰变量:被static修饰的全局变量具有静态存储期,即从定义开始到程序结束都存在,但作用域仅限于当前文件(即不能被其他文件访问),可以避免不同文件中同名变量的命名冲突。被static修饰的局部变量具有静态生存期,即变量一直存在,而不是随着函数的调用结束而销毁,但作用域仅限于当前代码块。
//static关键字修饰全局变量
#include <stdio.h>
static int count = 0; //定义静态变量
void increment()
{
++count;
printf("count is %d\n", count);
}
//file2.c
#include <stdio.h>
extern void increment(); //声明increment函数
int main()
{
increment(); //输出count is 1
increment(); //输出count is 2
increment(); //输出count is 3
return 0;
}
在该例子中,我们定义了一个静态变量count
,该变量只能在file1.c
文件内使用,无法在其他文件中访问。每次调用increment()
函数时,count
的值会自增并打印输出。
//static关键字修饰局部变量
#include <stdio.h>
int main()
{
for (int i = 0; i < 3; i++)
{
static int j = 0;
j++;
printf("i = %d, j = %d\n", i, j);
}
return 0;
}
在该例子中,我们定义了一个静态变量j
,在每次循环时j
的值会累加,并打印输出。由于j
被定义为静态变量,所以其生命周期会持续到程序退出,每次循环都使用相同的变量j
,而不是像非静态变量一样每次都创建一个新对象。
2. 修饰函数:被static修饰的函数具有静态链接属性,即只能在定义它的文件中访问。静态函数不会被其他文件所用,也就是它只能被本文件中的函数调用。
#include <stdio.h>
static void print()
{
printf("Hello, World!\n");
}
//file2.c
#include <stdio.h>
extern void print(); //声明print函数
int main()
{
print(); //这里可以访问print函数
return 0;
}
3. 静态断言:是一个编译错误,用于在编译期间检查某个条件是否为真。
总之,在C语言中,static主要用于控制变量和函数的作用域和链接属性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了