a.h
a.cpp
b.h//只应该包含声明,而不应包含定义。变量的声明、函数的声明。
b.cpp
说明——解决multiple definition的问题。
使用条件编译
- 使用条件编译控制被引入的文件,防止被多次编译。条件编译解决的是,预处理阶段,某一个文件,多次包含同一个文件。例如,b包含a,c包含a,c又包含b;#include的预处理阶段,c包含了两段a的代码,那么编译过程会出现include的错误。所以在所有的头文件中,应当加上条件编译,在给别人使用过程中,防止被直接或间接包含多次。
使用extern
- 使用extern对全局变量进行控制。extern解决的是,链接阶段,多个文件包含了同一文件,结果全局变量或函数多次定义的问题。使得头文件中的变量变为声明,在include过程中,被声明了多次。防止多次包含同一个全局变量起冲突。前提是这个模块会被外部使用。如果不可能被外部使用,则不需要使用extern声明。
使用const
- 使用const定义的常量。旨在文件中内有效,编译器在编译过程中,把用到该常量的地方都替换成了对应的值。