详解C/C++语言中Static 变量 或者 static函数的作用


1. 今天被问到C语言中Static假如修饰一个函数的话,这个Static 起到什么作用。

之前因为特别注意到这个问题,但一时之间可能说不出全部,我回答了关于 作用域的区别,其实是对的,因为其他文件无法访问这个函数了,static把这个函数局限于在这个文件当中,某种意义上“隐藏了”这个函数,但不够具体。 


在某个文件中,例如a.cc文件中,假如我们定义如下

char  a  =   ' A ' //  global variable
void  msg() 
{
    printf(
" Hello\n " ); 
}


在main.cc文件中我们可以

int main(void)
{    
    
extern char a;    // extern variable must be declared before use
    printf("%c ", a);
    (
void)msg();
    
return 0;
}

程序的运行结果是:

A Hello

你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。

如果加了static,就会对其它源文件隐藏。例如在amsg的定义前加上staticmain.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏。该函数又称为“内部函数”


对于变量来讲,static有以下三点作用:

1. 存储方式的改变, 局部变量一般都在栈空间分配空间,跳出作用域后会回收空间, static修饰后,变为静态变量,存放在静态数据区,具有全局属性,其实在程序运行前,该变量已被分配空间并且初始化(如不显示初始化会按照0初始化)

2. 作用域改变,static修饰变量后,该变量只在当前文件中有效, 好处在于,工程项目由多人开发时,可能存在同名的变量,通过使用static修饰可以将变量作用域限制在本文件中。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值