为什么在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