【C++注意事项】2 变量声明和定义

不可能将所有的C++程序放到一个文件中咯,因此C++就支持了分离式编译(separate compilation)机制,它允许将程序分为若干个文件,每个文件可被独立编译。这样说明了,当你的程序有很多文件时,修改其中一个文件后不需要将所有文件都重新编译一遍,只需要编译修改过的就好,然后将它们都链接起来。

C++是如何支持分离式编译的呢?通过将声明和定义分离开来。

声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含该名字的声明。

定义(definition)负责创建与名字关联的实体。

一个声明语句由一个基本数据类型(base type)和紧随其后的一个声明符(declarator)列表组成。

定义还需要申请存储空间,也可能会为变量赋一个初始值。

如果想声明一个变量而非定义它,就在变量名前添加关键字extern关键字标记的变量赋一个 初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明,而变成了定义。

extern int i;  // 声明i而非定义i
int j;  // 声明并定义j

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

// 错误
int main()
{
    extern int i;
    int i=10;

    return 0;
}

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

// 这样是可以得
extern int i;
extern int i;
extern int i;

int main()
{
    int i=10;

    return 0;
}

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

另外C++还会在编译阶段进行类型检查(type checking),所以也称C++是一种静态类型(statically typed)语言。程序越复杂,静态类型坚持越有助于发现问题。然后,前提是编译器必须知道每一个实体对象的类型,这就要求我们在使用某个变量之前必须声明其类型。

时间: 2024-10-05 04:44:51

【C++注意事项】2 变量声明和定义的相关文章

内存四域,变量声明和定义,寄存器,c内嵌汇编,auto,堆栈,常量,静态变量

 1.内存四大区域 2.在程序中,变量的声明可以有多份,定义只能有一份 3.寄存器在cpu里面,没有地址 4.c语言内嵌汇编语言 5.auto变量 自动分配内存,自动释放内存. 6.栈的大小由编译器决定 修改栈的方式,右击项目à属性à配置属性à链接器à系统à堆栈保留大小 7.卡死cpu,卡死内存的程序 8.在堆上申请空间后赋值后,不可以释放内容.要通过free方法进行释放对空间. 9.常量字符串在代码区.代码区是智能读的. 10.常量本质 10.静态变量,全局变量的差别 A全局变量可以跨文件

变量声明和定义的区别

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义(definition

变量声明和定义的关系

extern int i;    //声明i而非定义i int j;        //声明并定义j 任何包含了显示初始化的声明即成为定义.我们能由extern关键字标记的变量赋一个初始值,但是这么做也就抵消了extern的作用.extern语句如果包含初始值就不再是声明,而变成定义了: extern double pi = 3.1416;    //定义 在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误. Note:变量能且只能被定义一次,但是可以被多次声明

C++ Prime:变量声明和定义的关系

为了允许把程序拆分为多个逻辑部分来编写,C++语言支持分离式编译机制,允许将程序分割为若干个文件,每个文件可以独立编译. 为了支持分离式编译,C++将声明和定义区分开.声明使得名字为程序所知,一个文件如果想使用别处定义的名字必须包含对那个名字的声明.定义则负责创建与名字关联的实体. 变量声明规定了变量的类型和名字,定义还额外的申请储存空间,也可能会为变量赋一个初值. 想声明一个变量而不是定义它,在变量名之前添加关键字extern,而且不要显示地初始化变量: extern int i; // 声明

变量声明与定义的区别

本质区别在于是否分配内存.int a; 在声明的时候就已经建立了存储空间,所以既是声明又是定义extern int a; a是在别的文件中定义的,所以这里仅是声明类中的变量只是声明而不是定义,只有在实例化以后才会分配内存.EnclosingClass jb; //声明jb = new EnclosingClass(); //定义

C语法归约之变量声明和定义(0)

0前言 闲来无事,在屋里多看了一眼<编译原理>(2V),有练练手的冲动--采用LR(1)技术,写了一个C语言的语法归约器!之所以用LR(1)是因为gcc,ucc,tcc和lcc跟商量好似的,清一色的用的LL归约技术,书上也是讲的跟天花一样漂亮,那么就说明它已经十分成熟了,如果再使用LL技术实在是炸不出价值来,源码一抓一大把,看看就够了,重写必要性不大!另外,书中的LR技术讲的项集又是大的没谱,工作量太大:如果使用工具yacc生成,又不知道它咋搞的猫腻,所以就没有踩它们的脚印,自己整套方法hig

变量声明和定义

一.由来 C++支持分离式编译机制,该机制允许将程序分为若干个文件,每个文件可被独立编译. 如果将程序分为多个文件,则需要有在文件间共享代码的方法. 为了支持分离式编译,C++语言将声明和定义区分开来. 二.区别 声明使得名字为程序所熟知,一个文件如果想用别处定义得到名字则必须包含对那个名字的声明.变量声明规定了变量的类型和名字 extern int i ; //声明 i 而非定义 i 定义负责创建与名字关联的实体.定义除了要规定变量的类型和名字,还申请存储空间,也可能会为变量赋一个初始值. i

C++11类内static成员变量声明与定义

众所周知,将一个类内的某个成员变量声明为static型,可以使得该类实例化得到的对象实现对象间数据共享. 在C++中,通常将一个类的声明写在头文件中,将这个类的具体定义(实现)写在cpp源文件中. 因此,就引出了static成员变量的声明与定义问题: 1. 如果一个类内成员变量是static的,且需要将之设定为常量(const),那么这个变量声明与初始化均可写在头文件内. 举个例子: 1 // Scanner.hpp 2 class Scanner { 3 public: 4 const sta

C++ 变量的声明与定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义