原地址:https://blog.youkuaiyun.com/lixungogogo/article/details/50992298
在编译阶段,每个文件是分别编译的,在编译阶段我们可以通过条件编译的方法去防止头文件重复包含,但是由于宏是在编译之前处理的,
即宏的功能仅仅只能体现在编译阶段,因此#ifndef #define #endif语句只能防止编译阶段的“重复包含”错误。在链接时,由于链接器的作用是将编译器生成的.obj文件链接起来并生成最终可执行文件,因此链接器的作用范围是“文件之间”。不会再去处理宏预处理指令,所以条件编译这个方法只能在编译阶段防止重复包含,如果在头文件中进行了定义,即使用了条件编译语句,在链接的时候也会报重定义错误。
其实只要在头文件进行声明,不进行定义,就不会出错。因为定义不能定义两次,但是声明可以声明多次。