全局变量使用

来源:互联网 发布:mysql修改密码语句 编辑:程序博客网 时间:2024/06/08 16:15

 为什么使用全局变量:
1) 方便各个函数/模块之间共享数据.
2) 减小函数调用开销
3) 某些应用逻辑上的自然需求

为什么不使用全局变量:
1) 导致程序混乱,调试简直成了恶梦
2) 导致程序可读性大大下降


全局变量使用指南
1) 所有全局变量全部以g开头,并且全部申明成static类型
2) 坚决杜绝跨文件访问全局变量,也就是说坚决不使用extern关键字.如果的确需要再多个文件内访问同一变量,由该变量定义所在文件内提供GET/PUT函数实现.
3) 全局变量必须要有一个初始值.所有的全局变量都放再同一个专门的函数内初始化.
4) 如调用的函数少于三个,请考虑改为局部变量实现.


1) 方便各个函数/模块之间共享数据.
各函数间传递数据完全可以使用参数
不知道模块如何定义,如果是线程/进程级的,那就可以使用消息

2) 减小函数调用开销
全局变量和当前调用的函数可能不在同一段高速缓存中,甚至不在同一页内,可能造成高速缓冲不命中,从而导致额外的高速缓存和页的交换
反而降低效率

3) 某些应用逻辑上的自然需求
只有这个有点可能,但是仍然可以使用参数传递

为什么不使用全局变量:
1) 导致程序混乱,调试简直成了恶梦
2) 导致程序可读性大大下降
如果设计好的话,也不至于如此

全局变量使用指南
1) 所有全局变量全部以g开头,并且全部申明成static类型
编译器比程序员更加清楚一个符号是不是全局变量,而使用符号名称来标明符号性质是一种冗余,带来后续维护的麻烦

2) 坚决杜绝跨文件访问全局变量,也就是说坚决不使用extern关键字.如果的确需要再多个文件内访问同一变量,由该变量定义所在文件内提供GET/PUT函数实现.

3) 全局变量必须要有一个初始值.所有的全局变量都放再同一个专门的函数内初始化.
实际操作中很难做到,很多情况下几个全局变量互相之间存在依赖关系,比如a是由b的值初始化的,b又是由c的值初始化的
正确的做法可以参考effective c++的item 31,虽然是c++的书,但是对c通用适用

4) 如调用的函数少于三个,请考虑改为局部变量实现.

原创粉丝点击