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

允我心安 提交于 2020-02-28 04:53:24

我一直在头文件的开头看到这样的代码:

#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__时,它将不再包含。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!