zoukankan      html  css  js  c++  java
  • C语言中的声明与定义的差别

    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;
    出如今还有一个源文件里。大多数系统都会拒绝接受该程序。

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

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











查看全文
  • 相关阅读:
    JMeter Gui – TestElement约定(转自约会言行的博客,链接:http://blog.csdn.net/yue530tomtom/article/details/77649872?locationNum=4&fps=1)
    Maven的下载和安装
    开源蜘蛛集合(转自haizhiguang博客,链接:http://blog.csdn.net/haizhiguang/article/details/20209573)
    HtmlCleaner CleanerProperties 参数配置(转自macken博客,链接:http://macken.iteye.com/blog/1579809)
    java解析xml汇总(转自倾城幻影-Java解析xml汇总,链接:http://www.cnblogs.com/jiugehuanying/archive/2012/01/12/2320058.html)
    [20191005机房测试] Reverse
    【HAOI2010】软件安装
    [20191004机房测试] ZGY的早餐
    [20191004机房测试] C++锦标赛
    [20191004机房测试] 三角
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10631803.html
  • Copyright © 2011-2022 走看看