问大家个问题:
看到一段代码,大致是这样的:
工程中有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
extern只是声明,不会冲突.Top
但他声明这个有什么意义呢?
这样用有什么意义么?Top
这个不叫做冲突,在a.h中extern int A 声明之后,这个A就被当成一个符号
编译器就认为它存在而不去追究,而在链接的时候,链接器就会到别的文件里面去找int A 这样的定义,在你的问题中,链接器是在main.cpp找到了int A 这个全局变量的定义,于是a.h可以正常的被编译,整个程序也可以被执行。
是不会造成冲突的。extern int A 叫做外部的变量,也就是说这个变量的定义是在其所在的程序文件之外。Top
是为了多个文件中需要引用A时,可以直接引用a.h而不会产生定义冲突Top
这里没有意义,
如果有两个文件a.cpp,b.cpp
在a.cpp定义变量 int A;
在b.cpp中使用 就需要在b.cpp中写extern int A;来声明以下了Top
这样你就可以吧好多的变量定义到全局中使用啊~
反正我不怎么用这么东西~Top
定义与声明,不会冲突。若少
int A;//定义全局变量
反而会出现错误
Top
对于这个问题,最好和函数一起来考虑。
变量和函数一样都有声明、定义。Top
这两天在看C/C++深度探索,如果有机会可以关注一下
里面结合汇编讲,很清楚的~Top
一个是定义,一个是声明。没有冲突。
定义只能有一次,声明可以许多次。Top
你在另外一个文件再定义个全局变量A试试Top
>> 但他声明这个有什么意义呢?
>> 这样用有什么意义么?
单单在你给出的这个例子中,这样做没有什么作用。因为定义(int A;)本身就有声明的作用,左移不包含<a.h>这个头文件也是可以的。
把extern int A;放在头文件中的目的是:有可能在程序的其它源文件中使用全局变量 A,而使用它的话就要首先对其进行声明:extern int A;。包含<a.h>头文件之后就相当于对这个变量声明过了,可以使用这个变量了。Top
文章评论(0条评论)
登录后参与讨论