但要注意的是,#ifndef可以对重复的代码不进行二次编译,所以main.cpp单元内就不会出现重复定义这个问题,但是到了链接阶段,多个cpp可能同时引入了头文件A,所以把变量的定义或者函数的定义放在头文件中会导致链接阶段重复定义的问题,考虑到这点之后,c++推出了关键字extern用在声明变量是外部链接的,也叫引用声明,表示当前变量的定义只是一个声明而不是一个定义,具体的定义需要在链接的过程中找到对应文件下的定义。如上述source2头文件的例子,extern int a表明这只是一个变量的声明,并不是在此处定义的,在链接阶段会从对应的.cpp编译的二进制文件中找到变量定义。所以在头文件中一般只写声明。
头文件的写法source2.h-------------------------------------#ifndef#define SOURCE_2_H_extern int a; #endif-------------------------------------source2.cpp-------------------------------------#include"