主题:全局变量的雷区
			
 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实例绑定在一起。
							 
									
			
我来回复