c语言 static_最全面详实的Static应用,C语言必会技能(附代码实例)

在C程序开发过程中,很多人都忽视了静态变量和静态函数重大作用。笔者就遇到一位资深程序员,看到我写的代码里有static标识,很好奇,我告诉他后,他立马用到他程序里面了~~。

ba79d7b06b3a9add89c930bdf7db3ec2.png

静态类型

根据static修饰的对象,可分为两大类:在函数前面的和在变量前面的。

1. 放在函数前面

在实际项目中,我们经常会定义这样一些小函数,它们只被定义他们的那个文件里的其它函数调用,而不会被其它文件里的函数调用,即局部函数。建议要这样的函数前要加static,表明此函数的作用范围是本文件,也只能在本文件中使用,当然头文件中也是不能出现这个函数申明的,否则会报错。

来看一个例子,同一个项目包含file1.c和file2.c

//file1.c中

 int add(int x, int y) { return (x+y); } void int funFile1(void) { return add(1, 2); }

//file2.c中

 float add(float x, float y) { return (x+y); } void float funFile2(void) { return add(1.1, 2.1); }

很明显,编辑时会报add函数重复定义的错误。现在我们在add前面加上static试试。

//file1.c中

 static int add(int x, int y) { return (x+y); }

//调用本文件中static函数

 void int funFile1(void) { return add(1,2); }

//file2.c中

 static float add(float x, float y) { return (x+y); }

//调用本文件中static函数

 void float funFile2(void) { return add(1, 2); }

编辑通过,完全正确。说明在同一个项目中,不同文件中含有相同名字的static函数是允许的。这个功能在多人合作的大项目中,特别有用,只要大家定义好接口函数,可以极大的避免同文件名的错误。

2.放在变量前面

分在函数内和在函数外两种情况,关于Static变量在内存中的位置,详见关于内存堆栈

2.1 函数内的static变量

函数内的static变量只能被本函数调用,其特点是只能被初始化一次,而且,退出函数后其值会保持,限于函数内的“全局”变量.

 //每调用一次,val值增1 void int getCount(void) { //编辑时完成初始化值为1 static int val=1; val++; return val; }

2.2 函数外的static变量

定义在函数外的static变量只能被本文件中的函数使用,不能被其它文件使用。来看例子,同一个项目包含file1.c和file2.c

//file1.c

 //编辑时完成初始化值为1//与file2中的val没关系 static int val=1; void int incCount(void) { val++; return val; }//静态函数 (限file1.c) static void int decCount(void) { val--; return val; }

//file2.c

 //编辑时完成初始化值为10//与file1中的val没关系 static int val=10; void int inc(void) { val++; return val; }//静态函数 (限file2.c) static void int decCount(void) { val--; return val; }

编译通过,完全正确。同一项目中的不同文件含有同名静态变量允许存在,其作用域与静态函数一致。

码字不易,谢谢关注,你的点赞是我最大的动力。共享知识,共同成长!

ed5881b16314973f27020d8c03721a45.png
e66e1415893bd3b013328891c20899d2.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值