现在的位置: 首页 > 综合 > 正文

extern 详解

2013年09月16日 ⁄ 综合 ⁄ 共 743字 ⁄ 字号 评论关闭
        extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。
 
    extern int a;        //声明一个全局变量a
    int a;                  //定义一个全局变量a
    extern int a =0 ; //定义一个全局变量a 并给初值。一旦给予赋值,一定是定义,定义才会分配存储空间。
    int a =0;             //定义一个全局变量a,并给初值,
  声明之后你不能直接使用这个变量,需要定义之后才能使用。
 
  定义只能出现在一处。也就是说,不管是int a;还是int a=0;都只能出现一次,而那个extern int a可以出现很多次
当你要引用一个全局变量的时候,你就要声明extern int a;这时候extern不能省略,因为省略了,就变成int a;这是一个定义,不是声明。
 
案例分析;
 
1.在A.cpp中我们定义了一个全局变量i,在B中我们也定义了一个全局变量i。

我们对A和B分别编译,都可以正常通过编译,但是进行链接的时候,却出现了错误:
这就是说,在编译阶段,各个文件中定义的全局变量相互是不透明的,编译A时觉察不到B中也定义了i,同样,编译B时觉察不到A中也定义了i。
2.在A.cpp中我们定义了一个全局变量i,在B中没有定义全局变量i。
我们分别对A和B进行编译,A可以编译通过,而B编译通不过,出现错误:
这是很常见的错误,列举在这里只是为了说明,这里是因为 i 在B中没有定义。
3.在A.cpp中我们定义了一个全局变量 int i,在B中我们这样定义:extern int i;。
我们对A和B分别编译,都可以正常通过编译和链接。

抱歉!评论已关闭.