经过网友“任军”的点拨,鸿哥对C语言中的static恍然大悟。
本帖最后由 jianhong_wu 于 2014-9-17 16:54 编辑任军-深圳:
鸿哥好。
鸿哥--深圳:
你好
任军-深圳:
看了你的文章,写的很赞
鸿哥--深圳:
你看了哪个文章?
任军-深圳:
非常有工程实用性,核心原理是状态机+消息触发机制,框架那个。不过,鸿哥的全局变量满天飞,不怕自己搞晕了啊?
鸿哥--深圳:
我习惯了没事。
任军-深圳:
你刚刚新的帖子里讲到多文件编译,就不可避免谈到static修饰内部变量,函数的作用,貌似鸿哥忽略了这个?
鸿哥--深圳:
请教一个问题,static修饰内部变量有什么作用,我在做单片机项目中,从来没有用过static关键字,我们用全局变量和局部变量就够了。
任军-深圳:
将变量限制到文件作用域,外部看不见这个变量,从而避免了多个模块变量名字冲突
鸿哥--深圳:
有点理解。可能我做单片机的项目几乎不会用到,我要么就是全局变量,要么就是局部变量,感谢你的解答。
任军-深圳:
你自己写整个工程,可以自己控制变量名字,如果很多人做模块,然后整合呢?你能确保他们模块内部变量名字没有冲突?
鸿哥--深圳:
static跟全局变量有什么不一样?
任军-深圳:
模块外边看不到这个变量
鸿哥--深圳:
也就是用了这个static关键字,即使两个人内部用到全局变量名称都一样,编译也会通过?
任军-深圳:
嗯,私有变量。
鸿哥--深圳:
static主要是针对一个文件中的全局变量吧,如果是函数内部的局部变量,是没这个必要吧?
任军-深圳:
static具有保持性,普通局部变量在退出函数后,就失效了,下次再进去函数,需要重新初始化,static类型的变量,只初始化一次,下次就直接读取上次值。你状态机里面会用到这个。状态机主要用于文本解析,协议解析。你看下变量的维护,用static,就不用全局变量了。
鸿哥--深圳:
刚刚问了一下朱总,恍然大悟啊。也可以在局部变量用static的,会了这招,我以后就不会全局变量漫天飞了。而且用在全局变量的时候,在多文件编程的时候,还可以把它自己隐藏起来,避免跟别人文件里的变量名字冲突,我以前怎么不知道有这么好的东西呀,太遗憾太可惜了。
赞。。。。。。 赞一个。 原来static是这样用的,受教了 以前就看过这个局部变量和全局变量的问题,但理解还是不太到位,用的时候还是不知道该什么时候用,今天看了这个确实有点懂了,希望鸿哥再给个程序例子,深入理解一下就更好了:lol
另外,在此多谢鸿哥写的那么多例程,让我受益匪浅,也懂得了分享的快乐!谢鸿哥 yayagepei 发表于 2014-9-17 19:53
以前就看过这个局部变量和全局变量的问题,但理解还是不太到位,用的时候还是不知道该什么时候用,今天看了 ...
我打算下一节暂时不讲液晶屏,就先专门先讲一节C语言的static的例子。 unsigned char cnt;
void fun()
{
static unsigned char cnt;
}
鸿哥,是不是这么理解,全局变量的cnt的和函数里面定义的cnt互不影响? 黑夜之狼 发表于 2014-9-18 09:32
unsigned char cnt;
void fun()
{
static的奥妙和精髓不是这个。
页:
[1]