我们经常在 .h 文件中看到定义,例如
#ifndef _XX_H
#define _XX_
#ifdef __YY
#include <yy.h>
#endif
#endif
但是 _XX_H 是在哪里定义的呢?如果它已被定义。它可以在另一个 .h 文件中定义吗?可以由程序员未生成的一些文件定义吗?
在这种情况下,如果我想在我的 .h 文件中添加 __XX_H,我该怎么做。
#define _XX_H
像那样?
我们经常在 .h 文件中看到定义,例如
#ifndef _XX_H
#define _XX_
#ifdef __YY
#include <yy.h>
#endif
#endif
但是 _XX_H 是在哪里定义的呢?如果它已被定义。它可以在另一个 .h 文件中定义吗?可以由程序员未生成的一些文件定义吗?
在这种情况下,如果我想在我的 .h 文件中添加 __XX_H,我该怎么做。
#define _XX_H
像那样?
你是对的,它应该包括“_H”。包含守卫的一般形式:
#ifndef _FILE_H
#define _FILE_H
//INSERT CODE
#endif //_FILE_H
此格式允许您在多个文件中包含标头,而无需在标头文件中定义/包含任何内容两次
您帖子中的片段在包含防护方面有两个问题:
_XX_H
定义被检查,但_XX_
被定义——这可能是一个错字——这样的守卫不会“守卫”任何东西。你应该解决这个问题#define _XX_H
__YY
外部检查yy.h
- 这是一个非常糟糕的模式:它旨在<yy.h>
通过查看其私有包含保护来防止打开它来优化包含。这种做法使您的构建非常脆弱。如果作者yy.h
决定用_YY_H
代替来保护他们的包含__YY
,则标题内的保护将失败。