0

我们经常在 .h 文件中看到定义,例如

  #ifndef _XX_H
 #define _XX_
  #ifdef __YY
  #include <yy.h>
 #endif
#endif      

但是 _XX_H 是在哪里定义的呢?如果它已被定义。它可以在另一个 .h 文件中定义吗?可以由程序员未生成的一些文件定义吗?

在这种情况下,如果我想在我的 .h 文件中添加 __XX_H,我该怎么做。

#define _XX_H

像那样?

4

2 回答 2

4

你是对的,它应该包括“_H”。包含守卫的一般形式:

#ifndef _FILE_H
#define _FILE_H

//INSERT CODE

#endif //_FILE_H

此格式允许您在多个文件中包含标头,而无需在标头文件中定义/包含任何内容两次

于 2013-06-25T18:13:42.290 回答
4

您帖子中的片段在包含防护方面有两个问题:

  • _XX_H定义被检查,但_XX_被定义——这可能是一个错字——这样的守卫不会“守卫”任何东西。你应该解决这个问题#define _XX_H
  • 包含保护的定义在__YY外部检查yy.h- 这是一个非常糟糕的模式:它旨在<yy.h>通过查看其私有包含保护来防止打开它来优化包含。这种做法使您的构建非常脆弱。如果作者yy.h决定用_YY_H代替来保护他们的包含__YY,则标题内的保护将失败。
于 2013-06-25T18:15:41.600 回答