跨文件用全局变量的话,必须在用之前用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
全局变量
最新推荐文章于 2023-03-30 09:21:57 发布