static在c语言中的三种角色

发布时间:2026/8/30 22:59:19
static在c语言中的三种角色 什么是staticstatic就是静态修饰符可以延长生命周期(局限当前文件)和限制作用域的范围只能在当前文件下使用static是一个存储类型修饰符如存储类型修饰符 数据类型 变量名 (static int a)1.static修饰全局变量(静态全局变量)static在全局变量中作修饰只能在当前文件下使用哪怕在其他文件extern声明也不行(会报错)生命周期还是从程序开始到程序结束因为不作修饰的全局变量的生命周期也是从程序开始到程序结束如图1在图1中要想运行要同时编译两个.c文件要不然在主.c文件右边的.c文件中声明的int a是找不到另一个.c文件的可在tasks.json中的 args:[]中配置 .\\boke9.c,地址然后要说明的是有static修饰的变量时使主.c文件找不到如图2所以static修饰的int a10从公有区变成私有区了只限于当前.c文件使用;2.static修饰局部变量(静态局部变量)static在局部变量中作修饰只能在当前文件下使用生命周期从函数开始到函数结束变为从程序开始到程序结束因为不作修饰的局部变量的生命周期是从函数开始到函数结束且只初始化1次如图3由图3就可以看出static使int n0的生命周期延长了不会随着函数的结束而销毁且初始化1次如果删除static会使n的值分别打印三个n1说明它初始化了3次会随着函数结束而销毁3.static修饰函数(静态函数)static在函数前作修饰只是为了限制作用域让其他文件读取不到我当前文件的函数限制在当前文件下使用改变了链接属性(从公有变成私有);如图4与图1是一个形式的都是多文件编译加上static就找不到了编译错误如图54.补充一点:当static写在头文件.h中的变量时会使在头文件.h的声明变量从公有变私有多个.c文件用#include使用.h文件每个.c文件的同名变量都变成私有的了相当于多个副本不会报错而如果都在公有区就只能有一个变量不能重名同名直接报错所以不建议把static写在头文件.h内5.总结static在修饰全局变量和局部变量时是存储在静态区的分有没有初始化初始化在静态存储区的.data段而未初始化在静态存储区的.bss段static在修饰函数时因为函数的存储还是在代码段.text的static是不能改变的原因是.text段是只可读取不可改写的static的作用就是让一个公有区的变量跑到私有区生命周期是与存储方式有关的