1、对于以下的声明语句

int a;

       假设其位置出如今全部的函数体之外,那么它就被称为外部对象a的定义。这个语句说明了a是一个外部整型变量,同一时候为a分配了存储空间。由于外部对象a并没有被明白指定不论什么初始值,所以它的初始值默觉得0(某些系统中的连接器对以其它语言编写的程序并不保证这一点,C编译器有责任以适当方式通知连接器,确保未指定初始值的外部变量初始化为0)。

2、又如以下的声明语句:

int a = 7;

      在定义a的同一时候也为a明白指定了初始值。

这个语句不仅为a分配内存,并且也说明了在该内存中应该存储的值。

3、以下的声明语句:

extern int a;

       它并非对a的定义。

这个语句仍然说明了a是一个外部整型变量,可是由于它包含了externkeyword,这就显式说明了a的存储空间是在程序的其它地方分配的,从连接器的角度来看。上述声明是一个对外部变量a的引用。而不是对a的定义。

由于这样的形式的声明是对一个外部对象的显式引用,即使它出如今一个函数的内部,也仍然具有相同的含义。比如以下的函数srand在外部变量random_seed中保存了其整型參数n的一份拷贝:

void srand( int n )
{
extern int random_seed;
random_seed = n;
}

每一个外部对象都必须在程序某个地方进行定义。因此,假设一个程序中包含了语句

extern int a;

那么。这个程序就必须在别的某个地方包含语句

int a;

这两个语句既能够是在同一个源文件里,也能够位于程序的不同源文件里。

4、假设一个程序对一个外部变量的定义不止一次,又将如何处理?即对于以下的情形:

int a;

这个语句出如今两个或很多其它的不同源文件里,情况会是如何的?或者说。假设语句

int a = 7;

出如今一个源文件里,而语句

int a = 9;

出如今还有一个源文件里,将出现什么样的情形?这个问题的答案一般跟系统有关。

不同的系统可能有不同的处理方式。

严格的规则是:每一个外部变量仅仅能够定义一次

假设外部变量的多个定义各指定一个初始值,比如:

int a = 7;

出如今一个源文件里。而

int a = 9;

出如今还有一个源文件里。大多数系统都会拒绝接受该程序。

可是。假设一个外部变量在多个源文件张定义却没有指定初始值,那么某些系统会接受这个程序,而另外一些系统则不会接受。

可是为了避免这样的问题的发生,最好的方法是每一个外部变量仅仅定义一次。

最新文章

  1. 如何让你的网站支持https
  2. BOOST.Asio——扫盲
  3. C#基础系列——一场风花雪月的邂逅:接口和抽象类
  4. Java继承中的转型及其内存分配
  5. 学习Coding-iOS开源项目日志(四)
  6. respond.js
  7. iOS 的基本框架
  8. IIS、SQL SERVER和VS的安装顺序
  9. 全面谈谈Aspects和JSPatch兼容问题
  10. Android的Spinner
  11. __nonnull 和 __nullable (Swift 和 Objective-C混编)
  12. BZOJ1533: [POI2005]Lot-A Journey to Mars
  13. ListView 实现分组
  14. hdu 3333 Turing Tree(线段树+离散化)
  15. 菲菲更名宝贝(批量更名软件) v8.0 绿色版
  16. 用keychain这个特点来保存设备唯一标识。
  17. js 功能
  18. Latex: 保持参考文献大小写
  19. 重识linux-linux主机上的用户信息传递
  20. TensorFlow-实战Google深度学习框架 笔记(上)

热门文章

  1. iOS中的过滤器和正则表达式(NSPredicate,NSRegularExpression)
  2. HDU——2647Reward(DFS或差分约束)
  3. UOJ 274 【清华集训2016】温暖会指引我们前行 ——Link-Cut Tree
  4. [luoguP3413] SAC#1 - 萌数(数位DP)
  5. jQuary的相关动画效果
  6. mysql/oracle 连接参数中文变问号
  7. Redis命令行之Hash
  8. JFinal2.0极速开发视频教程发布【转】
  9. 读取编码器信息Python2.7和Python3.3版本差异及解决,一次订阅多次调用callback的解决
  10. 转:c++ 11 新特性