在C项目中定义

时间:2013-06-25 18:10:40

标签: c

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

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

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

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

#define _XX_H
是那样的?

2 个答案:

答案 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来保护其内容,则标题内的警卫会失败。