关于头文件包含的一点疑问解决方法

关于头文件包含的一点疑问
经常在程序中看到类似如下的句子:
#ifndef   FILENAME
#define   FILENAME

这个是怎么回事,请各位给详细讲解一下!谢谢了!

------解决方案--------------------
防止重复定义

------解决方案--------------------
防止重复定义
------解决方案--------------------
如果包含了当前的头文件,
会有一个 FILENAME 宏定义,
所以,
#ifndef FILENAME
#define FILENAME
的意义就是: 如果包含过当前的 h 文件(定义了 FILENAME 宏)那么就不再重复包含该 h 文件

这样就防止了重复包含 h 文件,
预防 例如 重复定义一类的错误 ~
------解决方案--------------------
mark
------解决方案--------------------
它的作用就是防止一个头文件被重复的编译.
我们还可以才用
#program once

------解决方案--------------------
准确的说法是用来在编译期间防止头文件的重复包含

防止重复包含作用的范围是以c和cpp文件为单位的,即一个编译单元。


------解决方案--------------------
简单地说,一个头文件可能被另一个文件include两次(直接或间接地)

//a.h
void func(){}

//b.h
#include "a.h "

//c.h
#include "a.h "
#include "b.h "

展开后,c.h变成
void func() {}
void func() {}
重复定义了
如果加了#ifdef,则c.h变成
#ifdef INCLUDE_A_H
void func() {}
#endif

#ifdef INCLUDE_B_H
#ifdef INCLUDE_A_H
void func() {}
#endif
#endif
第二个void func() {}会在预处理的时候被去掉,就没事啦