[C语言]变量的声明和定义有什么区别

为变量分配地址和存储空间的称为定义,不分配地址的称为声明。

变量定义:用于为变量分配存储空间,还可为变量指定初始值,程序中,变量有且仅有一个定义。

变量声明:用于向程序表明变量的类型和名字。

定义也是声明:当定义变量时我们声明了它的类型和名字。

extern声明不是定义,因为不分配存储空间。extern告诉编译器,变量在其他地方定义了。

//声明一个外部变量:(通过使用extern关键字,可以声明变量名而不定义它)
extern int Number;

 

//定义一个变量
int Number;

如果声明有初始化式,就被当作定义,即使前面加了extern。

只有当extern声明位于函数外部时,才可以被初始化。

//是extern声明,也是定义,因为对变量进行了初始化
extern double pi=3.1416; 

一个变量可以在多个地方声明,但是只能在一个地方定义。

加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。

说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。

变量的声明有两种情况:

1、一种是需要建立存储空间的。例如:int Number 在声明的时候就已经建立了存储空间。

2、一种是不需要建立存储空间的。 例如:extern int Number 其中变量Number是在别的文件中定义的。

前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”。

从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int Number 它既是声明,同时又是定义。然而对于 extern int Number 来讲它只是声明不是定义。

一般的情况下我们常常这样叙述:建立存储空间的声明称之为“定义”,不需要建立存储空间的声明称之为“声明”。

很明显我们在这里指的声明是范围比较窄的,即狭义上的声明,也就是说非定义性质的声明。

 

函数的声明和定义的区别比较简单,只是看函数之后是否带有{ }即可;

带有{ }的就是定义,不带的就是声明;

 

注意事项:
1.变量定义不要放在.h文件中,这会导致重复定义的错误;

2.可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量;

总结:
1.变量在使用之前要被定义或者声明;

2.变量只能被定义一次,但是可以被声明很多次;

3.定义会分配相应的存储空间,但是声明不会;

 

注意:

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

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

2.类的定义可以放到头文件中;

3.inline函数;

这三个实体可以定义在多个源文件中,只要在每个源文件中的定义相同;

posted @ 2020-04-08 22:23  MoKin_Li  阅读(5068)  评论(0编辑  收藏  举报