鱼C论坛

 找回密码
 立即注册
查看: 4713|回复: 6

static隐藏作用是什么意思

[复制链接]
发表于 2013-8-9 19:27:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
static隐藏作用是什么意思,它又是怎样工作的呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-9 19:46:14 | 显示全部楼层
如果在一个程序中有两个.c文件
a.c和b.c
那么这两个文件之间必定存在相互使用对方的全局变量或者函数的关系。以全局变量为例。
在a.c中定义了一个全局变量int global_in_a = 2003;
在b.c中为了使用这个全局变量就必须先
extern int global_in_a;
然后再使用。

我们称这样的全局变量global_in_a具有“外部链接属性”(其实就是其它文件可以访问它的意思)。

如果我们把a.c里的int global_in_a = 2003;
改为static int global_in_a = 2003;
那么b.c无论如何声明也无法访问该global_in_a。此时我们称int global_in_a具有“内部链接属性”(其实就是本.c文件可以访问它的意思)

你说的“隐藏作用”不是规范用语,我理解,它就是具有“内部链接属性”的意思。简单说static 修饰的全局变量仅具有内部链接属性。


以上说的是变量,函数也是一样,被static修饰的函数只有本.c文件可以调用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-9 20:51:36 | 显示全部楼层

讲的通俗易懂。
万分感谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-9 22:41:46 | 显示全部楼层
static有三个作用:
1、隐藏
比如a.c  和 b.c 分别由不同的程序员开发
a.c的私有函数,最好用static来修饰(也就是说,对内的接口要用static,而对外的接口不要用static)
2、把变量放入静态存储区
内存有三种存储空间(我的印象是。。~)
     一个是静态存储区  一个是动态存储区  一个是全局变量区域。
3、如果变量没有初始化,也就是说  static int a; 之类的,那么 a自动为0,如果是int a,那么a就是一个随机的数值。
     对于3,这一点其实也很重要,在大工程中,如果程序员没有初始化一个数值,就开始用了,那么可能会出现意想不到的bug。 所以我在工作的时候,一般都会在定义的时候初始化,比如说 int ret =-1. 最好就是初始化一个不正常的值,这样好处多多。  另外还有就是指针的初始化  FILE* fp = NULL;

其实学习c语言最难的不是语法啦,最重要的是用到工程项目上。
很多很多细节,都会影响一个工程的质量。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-8-10 00:10:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-8-10 00:13:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-10 10:50:40 | 显示全部楼层
superleolx 发表于 2013-8-10 00:13
sorry 我把a.c 看成了成员了, 呵呵,  如果是指文件的话, 1 也是对的, 请楼上的原谅

成员和文件有什么不同吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表