随着程序越来越复杂,为了保证程序的可维护性和易读性,将程序不同功能的代码放在不同的文件中
是一个很好的方式,为了允许编写程序时,将代码按照逻辑关系保存到不同文件中,C++支持了分离式编
译。
从代码层面来讲,为了更方便的实现分离式编译,一般会将函数/变量的声明和定义分离开。
其中函数/变量的声明放在.h头文件中,函数/变量的定义放在.cc文件中,如果要跨文件使用函数/变量,
引用头文件即可,例如:函数fun的定义位于 define.cc文件,fun的声明位于define.h头文件,在test文件要
使用fun函数,只需#include "defind.h" 。
将声明保存于.h文件的好处是,所有要用到fun的文件都只需要引用.h文件即可,避免了多次引用,如果
函数发生了修改,修改对应函数声明时,仅需修改.h文件里对应的这一个地方就可以,这里.h文件类似于统一
的接口要注意的是,声明可以有多次,而定义则不可重复定义,否则会有报错 。
extern关键字
主要是为了支持函数/变量的跨文件使用,如果在define.cc中定义、define.h中声明的函数fun要在test.cc中
使用,必须要在fun声明时加上extern关键字,例:extern fun(int a, int b);
extern的另一个用法是,可以指定编译方式,即如果直接用extern关键字,默认用C++方式编译,如果使用
extern "C"修饰,则声明使用C语言编译方式,这里对C方式编译做单独声明主要是因为C++的函数重载特性导致
如果使用C++方式来编译,函数的名称会在编译后变为函数名和函数形参的组合,而C编译方式则不会,因此使
用C++方式编译C的代码,会出现找不到函数的情况。