之前写了几篇独立的笔记,现在把他们串在一起捋一遍知识架构。
C++的编译模式和数据共享
C++和C一样支持“独立编译”:代码可放在不同的.cpp里编译成独立的代码块,之后进行各个代码块的链接。如果只改变了单个文件,可以只重新编译该文件,然后和其他文件的编译版本链接。那么不同.cpp的代码块之间如何进行数据交互和共享?通过定义和声明解决:一个变量或函数在一处.cpp中进行定义,其他.cpp需要使用这个数据时对该变量进行声明。
声明和定义
- 声明使得名字为程序所知,告诉程序本.cpp文件要使用这个变量或函数
- 定义负责对该变量或函数进行详细设计。
- 变量的定义只能出现在一个文件中,而使用到它的文件必须对其声明。(不可重复定义,但可以多次声明)
- 如何实现:extern可声明但不定义,如果对extern进行显式初始化则会抵消extern的作用:变成定义。
int i; //声明并定义
extern int i; //声明
extern int i=10; //定义
void f(); //声明
void f() {}; //定义
那么我们如何便捷的做到“有且仅一次定义,可多次声明”呢?
.h和.cpp的配合
- 可以把【函数原型,#define定义,const定义,结构声明,类声明,模板声明,内联函数】放在一个.h中(如math.h),其定义放在一个.cpp中&#x