独闷闷网

 找回密码
 立即注册
搜索
查看: 3916|回复: 7
收起左侧

[原创] 经过网友“任军”的点拨,鸿哥对C语言中的static恍然大悟。

[复制链接]
发表于 2014-9-17 16:52:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 jianhong_wu 于 2014-9-17 16:54 编辑

任军-深圳:
鸿哥好。

鸿哥--深圳:
你好

任军-深圳:
看了你的文章,写的很赞

鸿哥--深圳:
你看了哪个文章?

任军-深圳:
非常有工程实用性,核心原理是状态机+消息触发机制,框架那个。不过,鸿哥的全局变量满天飞,不怕自己搞晕了啊?

鸿哥--深圳:
我习惯了没事。

任军-深圳:
你刚刚新的帖子里讲到多文件编译,就不可避免谈到static修饰内部变量,函数的作用,貌似鸿哥忽略了这个?

鸿哥--深圳:
请教一个问题,static修饰内部变量有什么作用,我在做单片机项目中,从来没有用过static关键字,我们用全局变量和局部变量就够了。

任军-深圳:
将变量限制到文件作用域,外部看不见这个变量,从而避免了多个模块变量名字冲突

鸿哥--深圳:
有点理解。可能我做单片机的项目几乎不会用到,我要么就是全局变量,要么就是局部变量,感谢你的解答。

任军-深圳:
你自己写整个工程,可以自己控制变量名字,如果很多人做模块,然后整合呢?你能确保他们模块内部变量名字没有冲突?

鸿哥--深圳:
static跟全局变量有什么不一样?

任军-深圳:
模块外边看不到这个变量

鸿哥--深圳:
也就是用了这个static关键字,即使两个人内部用到全局变量名称都一样,编译也会通过?

任军-深圳:
嗯,私有变量。

鸿哥--深圳:
static主要是针对一个文件中的全局变量吧,如果是函数内部的局部变量,是没这个必要吧?

任军-深圳:
static具有保持性,普通局部变量在退出函数后,就失效了,下次再进去函数,需要重新初始化,static类型的变量,只初始化一次,下次就直接读取上次值。你状态机里面会用到这个。状态机主要用于文本解析,协议解析。你看下变量的维护,用static,就不用全局变量了。

鸿哥--深圳:
刚刚问了一下朱总,恍然大悟啊。也可以在局部变量用static的,会了这招,我以后就不会全局变量漫天飞了。而且用在全局变量的时候,在多文件编程的时候,还可以把它自己隐藏起来,避免跟别人文件里的变量名字冲突,我以前怎么不知道有这么好的东西呀,太遗憾太可惜了。

乐于分享,勇于质疑!
发表于 2014-9-17 16:55:55 | 显示全部楼层
赞。。。。。。
乐于分享,勇于质疑!
回复

使用道具 举报

发表于 2014-9-17 17:08:38 | 显示全部楼层
赞一个。
乐于分享,勇于质疑!
回复

使用道具 举报

发表于 2014-9-17 17:43:52 | 显示全部楼层
原来static是这样用的,受教了
乐于分享,勇于质疑!
发表于 2014-9-17 19:53:57 | 显示全部楼层
以前就看过这个局部变量和全局变量的问题,但理解还是不太到位,用的时候还是不知道该什么时候用,今天看了这个确实有点懂了,希望鸿哥再给个程序例子,深入理解一下就更好了
另外,在此多谢鸿哥写的那么多例程,让我受益匪浅,也懂得了分享的快乐!谢鸿哥
乐于分享,勇于质疑!
 楼主| 发表于 2014-9-17 23:34:00 | 显示全部楼层
yayagepei 发表于 2014-9-17 19:53
以前就看过这个局部变量和全局变量的问题,但理解还是不太到位,用的时候还是不知道该什么时候用,今天看了 ...

我打算下一节暂时不讲液晶屏,就先专门先讲一节C语言的static的例子。
乐于分享,勇于质疑!
发表于 2014-9-18 09:32:12 | 显示全部楼层
unsigned char cnt;
void fun()
{
     static unsigned char cnt;
}
鸿哥,是不是这么理解,全局变量的cnt的和函数里面定义的cnt互不影响?
乐于分享,勇于质疑!
 楼主| 发表于 2014-9-18 09:51:17 | 显示全部楼层
黑夜之狼 发表于 2014-9-18 09:32
unsigned char cnt;
void fun()
{

static的奥妙和精髓不是这个。
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2020-10-21 09:17 , Processed in 0.244063 second(s), 17 queries .

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