通俗易懂说static

1. static关键字有三个作用

1.1 作用1:隐藏

因为所有未加static修饰的函数、变量都具有全局可见性,即其他文件可见,可用;
加了static修饰后,修饰的函数、变量就会对其他源文件隐藏,就只能在本文件内被访问了。
利用这一作用可以在不同文件中定义同名函数或变量,而不必担心命名冲突。

1.1.1 项目中使用 static

项目中一般将只在本文件中使用的函数 前面用static 修饰,并且下划线+小写字母表示接口,如:

// add.c
static _xxx_yyy_addTwoNum()
{
	……
}
//说明这个接口只在本文件 add.c 中使用,其他文件不可见

1.1.2 全局变量如何被其他文件使用 - extern

1.对变量而言:

1. 因为全局变量不能在头文件中定义,如果定义会导致各个.c文件包含的这个头文件重复定义;
2. 全局变量可以再.c中定义,只要在.h中声明即可,那么如何声明呢?
	加了extern就是声明;
	如果没有extern关键字,就是定义;

参考:
extern 关键字说明
https://blog.csdn.net/lqy971966/article/details/118017369

2.对于函数而言:

1. 函数可以再头文件中声明,加与不加extern都是一样的意思。都是声明。

1.2. 作用2:保持变量内容持久

对于变量来说,第二个作用就是保持变量内容持久。
就是说,第一次初始化分配内存后,就算函数或者代码块执行完毕,
该变量也不会被回收销毁,直到程序结束 static 变量才会被回收。

1.3. 作用3:初始化为0

对于变量来说,第三个作用就是变量初始化为0,存储在静态存储区。

2. static静态全局变量

  1. static静态全局变量,函数,只在当前文件可见,其他文件不可见
  2. static静态全局变量与其他全局变量的区别:是否其他文件可见

3. static静态局部变量

static静态局部变量与其他局部变量的区别:

  1. 生命周期: static静态局部变量虽然是局部的,但是它存在于程序的整个生命周期
  2. 访问权限: 虽然存在于整个生命周期,但是只能被当前函数访问
  3. 初始化:默认初始化为0
  4. 值:以后每次调用都是上次修改的值,因为其存储在全局存储区

4. 举例:

#include <stdio.h>

//未加static 修饰
void func(void)
{
	int iTmp = 1;
	printf("func iTmp =%d\n", iTmp );
	 iTmp ++;
}

//加static 修饰
void func_static(void)
{
	static int iTmp = 1;
 	printf("func_static iTmp =%d\n", iTmp );
	iTmp ++;
}

int main(void)
{
	 printf("-----------first print ----------\n");
	 func();
	 func_static();
	 printf("--------second print------------\n");
     func();
	 func_static();
	 printf("--------------end--------------\n");
	 return 0;
}

**结果:**
--------first print ------------
func iTmp = 1
func_static iTmp = 1
--------second print------------
func iTmp = 1
func_static iTmp = 2
--------------end--------------
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值