回 帖 发 新 帖 刷新版面

主题:全局变量的雷区

各位老师,请教问题:全局变量的用法。

    我在编写一个程序,但他们公用的变量很多,于是我决定将公用的变量放到一个头文件中,出现了问题如下:我在file1.h中定义了一些变量如cardip(定义为 extern char cardip[];)等等,但在用cardip的文件file2中引用后编译没问题,但在连接时出现连接错误:Unresolved external '_cardip' referenced from file2.obj。什么原因?到底全局变量该如何使用?

回复列表 (共3个回复)

沙发

定义的时候为什么要这样:extern char cardip[];

引用头文件就可以了 #include...

板凳



  感谢一楼的回答,但我对一楼的回答还有疑问。如下:

  file2中cardip可以用#include....引用,但在file1中是定义变量的,所以用

extern char cardip[]来定义,file1是变量cardip定义的地方,其他如file2

是它被应用的地方才能用#include....。

        希望一楼的再接再历。

3 楼

你是如何理解外部变量的呢?
我这样认为:
    外部变量的定义是告诉编译器,在编译的时候不再分配相应变量的空间。而与编译器能否识别该外部变量没关系。
    编译器要连接外部变量,首先要有外部变量存在的空间。也就是说,我们可以定义外部变量来指向其他变量,这时,外部变量相当于是对其他变量的一个引用。
    举例来说:
    在工程中我们需要一个变量S,在file1中定义:int S;(编译File1文件,产生S的实例)。在File2中定义:extern int S;(编译File2文件,不产生S的实例,但由于有了该S变量的定义,编译程序能够识别程序中用到的S变量,并留出访问S的接口)。在链接程序中,将File2文件中的S接口和File1文件中的S实例绑定在一起。


我来回复

您尚未登录,请登录后再回复。点此登录或注册