• 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;这是一个定义,不是声明。
     
    编译阶段,各个文件中定义的全局变量相互是不透明的,编译A时觉察不到B中也定义了i,同样,编译B时觉察不到A中也定义了i。
    链接阶段,要将各个文件的内容“合为一体”,因此,如果某些文件中定义的全局变量名相同的话,在这个时候就会出现错误,也就是上面提示的重复定义的错误。
    因此,各个文件中定义的全局变量名不可相同。
    链接阶段,各个文件的内容(实际是编译产生的obj文件)是被合并到一起的,因而,定义于某文件内的全局变量,在链接完成后,它的可见范围被扩大到了整个程序。
     
    对于函数:
    如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:
    extern int f(); 和int f();
    当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,可以在所有的函数声明前添加extern修饰。但是要注意函数名不要重复。
  • 相关阅读:
    异常 集中异步处理
    客户端获取服务端自定义类数据 z
    客户端使用自定义代理类访问WCF服务 z
    学习“要件审判九步法”,正确处理五个关系 z
    “要件审判九步法”具体步骤
    要件审判九步法及其基本价值 z
    WCF Windows Service Using TopShelf and ServiceModelEx z
    [ACM_数据结构] Color the ball [线段树水题][数组开大]
    [ACM_数据结构] HDU 1166 敌兵布阵 线段树 或 树状数组
    [ACM_数据结构] 线段树模板
  • 原文地址:https://www.cnblogs.com/geowu/p/5099305.html
Copyright © 2020-2023  润新知