主题:全局变量的雷区
emmaduan
[专家分:0] 发布于 2005-07-14 14:30:00
各位老师,请教问题:全局变量的用法。
我在编写一个程序,但他们公用的变量很多,于是我决定将公用的变量放到一个头文件中,出现了问题如下:我在file1.h中定义了一些变量如cardip(定义为 extern char cardip[];)等等,但在用cardip的文件file2中引用后编译没问题,但在连接时出现连接错误:Unresolved external '_cardip' referenced from file2.obj。什么原因?到底全局变量该如何使用?
回复列表 (共3个回复)
沙发
不惊风云 [专家分:130] 发布于 2005-07-16 00:17:00
定义的时候为什么要这样:extern char cardip[];
引用头文件就可以了 #include...
板凳
emmaduan [专家分:0] 发布于 2005-07-18 13:33:00
感谢一楼的回答,但我对一楼的回答还有疑问。如下:
file2中cardip可以用#include....引用,但在file1中是定义变量的,所以用
extern char cardip[]来定义,file1是变量cardip定义的地方,其他如file2
是它被应用的地方才能用#include....。
希望一楼的再接再历。
3 楼
yaopo [专家分:240] 发布于 2005-07-19 11:55:00
你是如何理解外部变量的呢?
我这样认为:
外部变量的定义是告诉编译器,在编译的时候不再分配相应变量的空间。而与编译器能否识别该外部变量没关系。
编译器要连接外部变量,首先要有外部变量存在的空间。也就是说,我们可以定义外部变量来指向其他变量,这时,外部变量相当于是对其他变量的一个引用。
举例来说:
在工程中我们需要一个变量S,在file1中定义:int S;(编译File1文件,产生S的实例)。在File2中定义:extern int S;(编译File2文件,不产生S的实例,但由于有了该S变量的定义,编译程序能够识别程序中用到的S变量,并留出访问S的接口)。在链接程序中,将File2文件中的S接口和File1文件中的S实例绑定在一起。
我来回复