原创 extern全局变量的问题

2008-11-1 10:28 3092 4 4 分类: MCU/ 嵌入式

extern全局变量的问题


楼主wwwangkai(福)2004-09-04 11:01:53 在 C/C++ / C++ 语言 提问

问大家个问题:  
  看到一段代码,大致是这样的:  
  工程中有main.cpp,a.h两个文件  
  在main.cpp中  
   
  #include"a.h"  
  int   A;//定义全局变量  
  main(){  
  ...  
  }  
   
  而在a.h文件中,有如下内容:  
   
  extern   int   A  
   
   
  我想问的是为什么在main.cpp中,它将a.h   include进去,和它定义的A冲突么?  
   
  这样用是什么意思呀?  
   
  大家帮我看看,先谢谢了  
  问题点数:0、回复次数:12Top









1 楼shenyiwen(沈亦文)回复于 2004-09-04 11:06:10 得分 0


extern只是声明,不会冲突.Top


2 楼wwwangkai(福)回复于 2004-09-04 11:09:37 得分 0


但他声明这个有什么意义呢?  
   
  这样用有什么意义么?Top


3 楼goodboy1881(积木)(专回没人理的帖)回复于 2004-09-04 11:10:52 得分 0


这个不叫做冲突,在a.h中extern   int   A   声明之后,这个A就被当成一个符号  
  编译器就认为它存在而不去追究,而在链接的时候,链接器就会到别的文件里面去找int   A   这样的定义,在你的问题中,链接器是在main.cpp找到了int   A   这个全局变量的定义,于是a.h可以正常的被编译,整个程序也可以被执行。  
  是不会造成冲突的。extern   int   A   叫做外部的变量,也就是说这个变量的定义是在其所在的程序文件之外。Top


4 楼shenyiwen(沈亦文)回复于 2004-09-04 11:12:07 得分 0


是为了多个文件中需要引用A时,可以直接引用a.h而不会产生定义冲突Top


5 楼ma100()回复于 2004-09-04 11:12:29 得分 0


这里没有意义,  
   
  如果有两个文件a.cpp,b.cpp  
  在a.cpp定义变量   int   A;  
  在b.cpp中使用   就需要在b.cpp中写extern   int   A;来声明以下了Top


6 楼goodboy1881(积木)(专回没人理的帖)回复于 2004-09-04 11:17:36 得分 0


这样你就可以吧好多的变量定义到全局中使用啊~  
  反正我不怎么用这么东西~Top


7 楼zhuonline(卓林)回复于 2004-09-04 11:19:22 得分 0


定义与声明,不会冲突。若少  
  int   A;//定义全局变量  
  反而会出现错误  
  Top


8 楼zhangfjj(小张(正在学习Linux。。。))回复于 2004-09-04 11:29:48 得分 0


对于这个问题,最好和函数一起来考虑。  
  变量和函数一样都有声明、定义。Top


9 楼goodboy1881(积木)(专回没人理的帖)回复于 2004-09-04 11:45:06 得分 0


这两天在看C/C++深度探索,如果有机会可以关注一下  
  里面结合汇编讲,很清楚的~Top


10 楼pacman2000(pacman)(影子传说)回复于 2004-09-04 11:50:00 得分 0


一个是定义,一个是声明。没有冲突。  
  定义只能有一次,声明可以许多次。Top


11 楼66766(毁人不倦)回复于 2004-09-04 12:41:32 得分 0


你在另外一个文件再定义个全局变量A试试Top


12 楼whyglinux(山青水秀)回复于 2004-09-04 12:43:36 得分 0


>>   但他声明这个有什么意义呢?  
  >>   这样用有什么意义么?  
   
  单单在你给出的这个例子中,这样做没有什么作用。因为定义(int   A;)本身就有声明的作用,左移不包含<a.h>这个头文件也是可以的。  
   
  把extern   int   A;放在头文件中的目的是:有可能在程序的其它源文件中使用全局变量   A,而使用它的话就要首先对其进行声明:extern   int   A;。包含<a.h>头文件之后就相当于对这个变量声明过了,可以使用这个变量了。Top

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条