jianhong_wu 发表于 2014-9-17 16:52:13

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

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

任军-深圳:
鸿哥好。

鸿哥--深圳:
你好

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Jack——宁波 发表于 2014-9-17 16:55:55

赞。。。。。。

又一个暑假 发表于 2014-9-17 17:08:38

赞一个。

13431253 发表于 2014-9-17 17:43:52

原来static是这样用的,受教了

yayagepei 发表于 2014-9-17 19:53:57

以前就看过这个局部变量和全局变量的问题,但理解还是不太到位,用的时候还是不知道该什么时候用,今天看了这个确实有点懂了,希望鸿哥再给个程序例子,深入理解一下就更好了:lol
另外,在此多谢鸿哥写的那么多例程,让我受益匪浅,也懂得了分享的快乐!谢鸿哥

jianhong_wu 发表于 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互不影响?

jianhong_wu 发表于 2014-9-18 09:51:17

黑夜之狼 发表于 2014-9-18 09:32
unsigned char cnt;
void fun()
{


static的奥妙和精髓不是这个。
页: [1]
查看完整版本: 经过网友“任军”的点拨,鸿哥对C语言中的static恍然大悟。