为什么在C ++头文件中使用#ifndef和#define?

我已经看到这样的代码通常在头文件的开始:

#ifndef HEADERFILE_H #define HEADERFILE_H 

并在文件的结尾是

 #endif 

这个的目的是什么?

那些被称为#include警卫 。

一旦包含标题,它将检查是否定义了一个唯一的值(在这种情况下是HEADERFILE_H )。 然后,如果没有定义,它定义它,并继续到页面的其余部分。

当再次包含代码时,第一个ifndef失败,导致一个空白文件。

这可以防止任何标识符,如types,枚举和静态variables的双重声明。

 #ifndef <token> /* code */ #else /* code to include if the token is defined */ #endif 

#ifndef检查给定的标记是否已经在文件的前面或在一个包含的文件中被#defined ; 如果没有,则包含它与#else之间的代码,或者如果#else不存在,则包含#endif语句。 #ifndef经常被用来通过定义一个标记,一旦文件已被包含,并检查该标记没有被设置在该文件的顶部,使幂等的头文件。

 #ifndef _INCL_GUARD #define _INCL_GUARD #endif