浅谈声明与定义的区别

  • 格式:docx
  • 大小:18.43 KB
  • 文档页数:1

浅谈声明与定义的区别
清楚明白声明与定义是一名合格的程序猿的基本要求。

本人认为,C++编码过程中谈及“声明”和“定义”只是因为我们要使用一个变量、类型(类、结构体、枚举、共用体)或者函数,因此有申明和定义变量、类型和函数之说。

C/C++中,使用一个变量、类型或者函数必须先在使用前申明它。

请记住,“声明”与“定义”的本质区别是:声明可以出现多次,而定义只能出现一次。

也请记住,把申明的东西放在头文件,把定义的东西放在源文件(.c或者.cpp文件)。

下面介绍申明和定义的具体含义:
申明变量:指明变量所属类型与变量名称,如:extern int a;
定义变量:指明变量所属类型、名称与初始化其初始值,如int a=1;或者int a(1);如果不显示初始化,则按照编译器默认进行初始化。

定义类型:指明类型的名称和内容,如struct test{int a;}。

或者给已经存在的类型起个别名,如typedef int int32;
注意:
(1)类型的作用域是源文件,因此在不同源文件定义相同名称的类型,比如定义
同名的类是不会报重定义错误的,但在相同的源文件则编译器会报重定义错误。

(2)类型没有声明之说,即没有“申明类型”的说法,只给出类型的名称,让编译器去帮你查找类型的定义是不可行的。

比如extern class Test; 和class Test; 是无法通过编译的!使用类型之前给出其定义式即可,即给出类型的名称和内容,或者利用typedef给一个类型起个别称。

虽然说是定义类型,但还是将类型的定义放在头文件,即使被不同的源文件包含,因为其类型的作用域是源文件,所以不会报重定义错误的,这和变量和函数不同,不能将变量和函数的定义放在头文件!切记!
申明函数:指明函数返回类型,函数名称和函数参数,如int test(char a, int b);
定义函数:指明函数返回类型、函数名称、函数参数和函数体。

如int test(char a,int b){return a+b}
参考文献:
[1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008.。