全局变量

跨文件用全局变量的话,必须在用之前用extern声明 比如,你在1.CPP中一个变量int a; 你想在2.CPP中引用它的话,在2.CPP中,先用extern int a; 然后就可以用了. 好像还要#include"core.c" ________________________________________ 这是因为你的变量在.c文件中,而使用在cpp文件中。C编译和C++编译对变量的名字有不同的修饰方法,因此会倍翻译成不同的内部符号名 几个建议: 1. 不要混用.c和.cpp,要么都是.c,要么都是.cpp 2. 如果你在.c中定义了函数或者变量,并且希望给别人用,必须在头文件中做如下声明(你应该创建core.h) #ifdef _cplusplus extern "C"{ #endif extern blank>target=_blank>unsigned char xx[10]; #ifdef _cplusplus }; #endif 为什么使用全局变量: 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) 如调用的函数少于三个,请考虑改为局部变量实现. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hjzwl1018/archive/2008/10/09/3040547.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值