这是一个基础且重要的知识。什么是声明,什么是定义。
让我们先来看看下面的两个例子
int a;
extern int a;
这两个里面,哪个是声明? 哪个是定义?
要解决这个问题,当然我们需要先知道什么是声明,什么是定义。
声明:
1) 告诉编译器,这个变量名或对象已经匹配到一块内存空间上了。下面的代码用到变量或对象是在别的地方定义。声明可以出现多次。
2) 告诉编译器,这个名字已经被预定了,别的地方再也不能它来作为变量名或对象名。这种声明最典型的例子就是函数参数的声明。
定义:
就是编译器为一个变量或对象分配一块内存空间,并给它取上名字。这个名字就是变量名或对象名。并且,在这个变量的作用域中只能被定义一次,当被定义多次的时候,编译器会报错。说你重覆定义同一个变量或对象。
或许还有个疑问。例子2 语句中的 extern 是什么作用?这里就这个问题简单说说 extern 它的其中一个作用。
extern 可以修饰变量,即系放在变量前。其作用是声明 我(extern)修饰的变量其定义在别的文件中。不在当前文件。
OK,现在我们知道了其各自的含义了。那么对于上面两个例子,我想答案早已浮现了。
int a; //此语句为定义
extern int a; //此语句为声明
对于声明和定义,其实它们有个很明显的区别:
定义,创建了对象并分配内存空间。声明,没有分配空间