在头文件中加入#ifndef或#ifdef等宏定义,是为了防止重复声明。
我们知道,头文件一般是用来声明的,会被其他的源文件和头文件include,当被多个文件include的时候就会造成重复声明。 为了使得只声明一次,引入前面所说的宏定义,一般以文件名大写和_来当宏的名字。
这个宏是给预处理器用的,通常预处理变量用大写,所以这些宏定义都用大写。为了方便,一般将大写的文件名作为预处理器变量,其实在#ifndef后面加什么都都可以,用文件名只是为了好区分。它只是用来定义一个预处理器变量。
头文件“被重复引用”是什么意思?
其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。
比如:存在a.h文件#include "c.h",而b.cpp文件同时#include "a.h" 和#include "c.h",此时就会造成c.h被b.cpp重复引用。
那么在c++中为什么要防止头文件被重复包含呢?
比如B.cpp 要用到B.h,然后就include了; A.cpp也要用到B.h,然后也include了。 然后再在主函数里同时用到B.cpp和A.cpp里面的函数的时候,主函数要引用include B.h, include A.h,然而A.h已经包含B.h了,造成了重复包含。