我一直在头文件的开头看到这样的代码:
#ifndef HEADERFILE_H
#define HEADERFILE_H
并在文件的最后是
#endif
这样做的目的是什么?
#1楼
这些被称为#include警卫 。
包含标头后,它会检查是否定义了唯一值(在本例中为HEADERFILE_H
)。 然后,如果未定义,则定义它并继续到页面的其余部分。
当再次包含代码时,第一个ifndef
失败,导致空白文件。
这可以防止双重声明任何标识符,例如类型,枚举和静态变量。
#2楼
#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
#3楼
这可以防止多次包含相同的头文件。
#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif
假设您已将此头文件包含在多个文件中。 因此,第一次没有定义__COMMON_H__时,它将被定义并包含头文件。
下次定义__COMMON_H__时,它将不再包含。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3161522