C++ 变量的声明和定义

     为了允许把程序拆分成多个逻辑部分来编写,C++语言支持单独编译(separate compilation)机制,该机制允许将程序分割为若干个文件,每个文件可被独立分离式编译。

    为了支持分离式编译,C++语言将声明和定义区分开来。

    变量的声明有两种情况: 一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。 另一种是不需要建立存储空间的。

   声明是告诉编译器一些信息,以协助编译器进行语法分析,避免编译器报错。而定义是告诉编译器生成一些代码,并且这些代码将由连接器使用。即:声明是给编译器用的,定义是给连接器用的。

概念:

    1,声明(declaration)

         用于向程序表明变量的类型和名字,它只是说明变量定义在程序的其他地方,在其他地方已经完成了定义,这里只是说明有这么个变量存在。

     2,定义(definition)

         告诉编译器建立变量并分配存储空间,并且给变量一个指定的初始值

   总结:

    1,定义也是声明,当定义变量时我们声明了它的类型和名字,同时为变量分配了内存空间及初始值。

    2,如果想声明一个变量而非定义它,就在变量名前添加关键字extern,通过extern关键字声明变量而不是定义,即不分配存储空间。

    3,extern声明的变量不要显式地初始化变量,任何包含显示初始化的声明就会变成定义。我们能给由extern关键字标记的变量赋一个初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明,而变成定义了:

extern double pi = 3.1416; //definition

   4,在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。

    5,变量能且只能被定义一次,但是可以被多次声明。

    6,如果要在多个文件中使用同一个变量,就必须将声明和定义分离。此时,变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却绝对不能重复定义。

    7,在头文件中不能放变量的定义,一般存放变量的声明。因为头文件要被其他文件包含,如果放到头文件当中就不能避免变量被多次定义。

    

   变量的声明如:extern int i; 在变量定义前加extern关键字表示声明一个变量但不定义它,这对函数同样有效,如:extern int Add(int a, int b);因为没有函数体,编译器必会把它视作声明而不是定义,extern关键字对于函数来说是多余的,可选的。

   变量的定义如:int i;如果在此之前没有对i的声明,那么这里既是对它的声明也是对它的定义,编译器会为其分配对应的内存。

   注:有三个例外,以下三种实体的定义也可放到头文件中。

  1.值在编译时就已知的const 变量的定义可以放到头文件中

 const int num = 10;

  2,类的定义可以放到头文件中。

  3,inline 函数。

    

    感谢原作者的辛勤劳作:

    https://www.cnblogs.com/vineleven/p/4650750.html

    http://lizhiyuan.bokee.com/907634.html

    https://blog.csdn.net/m0_37962600/article/details/78334077

    https://www.cnblogs.com/lca1826/p/6505701.html 

 

    C++ 函数的声明和定义

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值