对于初学C或者C++的同学来说很多都分不清变量的定义与声明的区别,有些同学会说这两者区别不重要,即使不知道也可以写出程序,诚然不清楚他俩的区别的确可以写出程序,他俩的区别可能看起来微不足道,但事实上却是举足轻重的。
C/C++程序很多都是由多个源文件构成的,为了让多个文件访问相同的变量,C/C++区别了声明和定义。
变量的定义用于为变量分配存储空间,还可以为变量指定初始值,在一个程序中只能定义一次,出现多次编译器会报错,变量的定义也是声明,当定义一个变量的时声明了它的类型和名字
变量的声明用于向程序表明变量的类型和名字,当对一个变量进行声明时,编译器不会为其分配内存空间。可以通过使用extern关键字声明变量名而不定义它。不定义的变量的声明包括声明的对象类型,对象名和关键字extern
例如: extern int i; //只对变量进行声明但是没有定义
int i; //声明并定义了变量i
如果声明有初始化式,则该声明也就是定义,所以判断是不是声明,不要单单靠有没有关键字extern,注意带有extern关键字的定义或声明的对象必须是全局变量,也即必须定义或声明在函数外部。事实上extern关键字只是说明声明的变量或函数可能定义到其他源文件中了(extern的作用远不止这些)。
形如:extern int i=232; //虽然带有关键字extern,但是有初始化那就是定义,在随后的操作中切忌不能在重复定义了
extern int i; //对,因为该语句是声明,不是定义
int i; //错,因为该语句是定义,由于上面已经定义过了
extern int i=100; //错,因为已经上面已经定义过了
怎么样?看着上面的解释是不是还是有点迷茫啊,没关系,我再来总结一下
无论怎么样你一定要记住
(1)定义在整个程序中只能有一次,定义的同时会为变量分配内存空间
(2)判断声明的最好方式是看有没有extern关键字,如果有的话再看变量有没有被赋值,没有被赋值的就是声明,有的话还是定义,所以声明的形式是:extern 数据类型 变量名;