我们经常看到.h文件中的定义,如
#ifndef _XX_H
#define _XX_
#ifdef __YY
#include <yy.h>
#endif
#endif
但_XX_H在哪里定义了?如果它被定义了。它可以在另一个.h文件中定义吗?可以由程序员生成的一些文件来定义吗?
在这种情况下,如果我想在我的.h文件中使用__XX_H,我该怎么做呢。
#define _XX_H
是那样的?
答案 0 :(得分:4)
你是正确的,它应该包括“_H”。包括警卫的一般形式:
#ifndef _FILE_H
#define _FILE_H
//INSERT CODE
#endif //_FILE_H
此格式允许您将标题包含在多个文件中,而无需在头文件中定义/包含任何内容两次
答案 1 :(得分:4)
帖子中的代码段在inclusion guards中存在两个问题:
_XX_H
定义已经过检查,但_XX_
已定义 - 这可能是一个错字 - 这样的警卫不会“保护”任何内容。您应该将其修改为#define _XX_H
__YY
之外检查yy.h
包含守卫的定义 - 这是一个非常糟糕的模式:它旨在通过阻止{{1}的打开来优化包含通过查看其私人包含守卫。这种做法使您的构建非常脆弱。如果<yy.h>
的作者决定使用yy.h
代替_YY_H
来保护其内容,则标题内的警卫会失败。