如何有效减少全局变量的使用?

用屁股写代码 2008-06-07 04:51:48
我用的是c 没有类,

我想消减我使用的全局变量,但是貌似有些是无法消掉的是么?
比如,我有个计时器设置标准变量,为0时 到这里装个计时器,然后设置为1,以后在程序的任何时候再来就再也不设置了。这种变量除去用全局变量还有什么好的方法么?(只是用c),我是在win 32框架下的,如果是main(){}那种可以在main中定义,在需要时传递,但是 如果是windows的回调消息,如winproc函数,那么怎么定义一个在整个程序生存周期中都存在的变量,而且还不是全局变量。
...全文
672 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joephia 2008-06-08
  • 打赏
  • 举报
回复
引用
Joe得第三个方法不对,你new出来得对象自然可以持续,但是这个指针保存在哪?


回复
指针只占4个字节的内存,根本不需要考虑放在哪,任何类中都可以,

如果你需要,可以在任何一个子窗口中new出来,并把这个指针放到APP类的 void× 指针变量中,当需要时强制转换,

用完不用了delete掉.这个就叫活用
Joephia 2008-06-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jennyvenus 的回复:]
提倡大量使用全局变量,最好是不用任何局部变量,那样就没有逻辑问题了。
[/Quote]

很欣赏这位楼友的想法,不过,会在思考用什么变量名的问题上大费脑经
用户 昵称 2008-06-08
  • 打赏
  • 举报
回复
提倡大量使用全局变量,最好是不用任何局部变量,那样就没有逻辑问题了。
ok1234567 2008-06-08
  • 打赏
  • 举报
回复
在纯C中,不用全局变量也不一定省心
可以考虑尽量多的结构、联合,共用缓存区(足够大)
另外将这些全局变量定义在一个条理清楚地文件中,并且写足够琐碎的引用注释

太多的全局变量容易产生难以发现的逻辑错误,代码维护也很累:)
闪破风浪 2008-06-07
  • 打赏
  • 举报
回复
路过学习~
arong1234 2008-06-07
  • 打赏
  • 举报
回复
经常问问自己:这个问题不用全局变量怎么做?
arong1234 2008-06-07
  • 打赏
  • 举报
回复
Joe得第三个方法不对,你new出来得对象自然可以持续,但是这个指针保存在哪?这样得方法解决不了楼主得问题
其他两个是个好方法
1楼得方法也不错

[Quote=引用 5 楼 Joephia 的回复:]

三、活用 new 分配内存,大家都知道 new 出来的变量其生命周期可以延续到程序结束,所以这是个不用定义全局变量的全局变量,而且能够在需要的时候释放这个变量

[/Quote]
arong1234 2008-06-07
  • 打赏
  • 举报
回复
任何一个系统都不可能完全避免全局变量,著名的errno原来就是全局变量,现在变成了线程局部存储,从某种意义讲,还是全局的。
问题是不能滥用。全局变量的问题不在于不安全,而在于它增加了模块间的耦合程度。你定义的一个全局变量,实际上其他模块一样可以访问,这样你所希望的控制的访问不一定完全能控制。

设计程序时,要尽量避免使用“怎么定义一个在整个程序生存周期中都存在的变量”的对象,这个没有专门的规则,得根据自己设计需要定,我想需要经验才能把握好。
用屁股写代码 2008-06-07
  • 打赏
  • 举报
回复
我只知道全局变量很不安全,调试困难(针对大程序和使用范围广泛的变量),占用永久内存,但免去开辟内存可以节省时间,
当然,想我这样的新手和懒人使用是为了避免传递参数的麻烦。

呵呵,解决办法果然很多,希望再给几个解决办法,晚上就能结贴了
Joephia 2008-06-07
  • 打赏
  • 举报
回复

指针是个非常有争议的概念:一方面它很不安全,没有严格的边界限制也不受访问权限的限制,另一方面C++依靠指针才能灵活的传递和访问数据。

所以能够把指针用好就能减少全局变量的定义。

方法有三:
一、多使用消息机制,WindowsAPI 是最大消息函数库,使用消息能够避免非法的访问数据和成员函数,其中参数lParam就是特别留给指针使用的

二、在设计自定义类时,我们考虑的更多的不是实现什么功能,而是怎么样才能让这个类具有生命力,能在各种环境中灵活发挥这个类的作用,这就需要设计很好的接口函数,这必然离不开指针的使用。典型的如GetDocument()函数

三、活用 new 分配内存,大家都知道 new 出来的变量其生命周期可以延续到程序结束,所以这是个不用定义全局变量的全局变量,而且能够在需要的时候释放这个变量

如果按照上述方法,那么,在全局变量会用的很少。

当然方法不是唯一的
zys85 2008-06-07
  • 打赏
  • 举报
回复
定义宏
#define test 1
然后你把test当变量为1的全局变量用
xumercury 2008-06-07
  • 打赏
  • 举报
回复
学习
kingstarer 2008-06-07
  • 打赏
  • 举报
回复
使用全局变量有何坏处?

对于你说的情况,我感觉用静态变量也能完成
cnzdgs 2008-06-07
  • 打赏
  • 举报
回复
全局变量有些时候是无法避免的,只能尽量减少全局变量。我能想到的主要有三个方面:
1、通过函数参数传递数据或指针。对于回调函数,通常有一个参数是自定义的数据指针,可以利用这个参数传递类指针或者自定义一个结构的指针。
2、只在某一个函数中使用的变量可以定义为局部静态变量(在函数内部定义,前面加static修饰)。
3、把全局变量定义成一个结构,定义一个全局的结构体变量。
此外,对于窗口控件,可以通过SetWindowLong设置GWL_USERDATA来保存类指针。一些控件的Item也可以SetItemData来保存一个结构指针。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧