天天看点

C/C++中定义与声明的区别

     对于初学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  数据类型  变量名;