什么是一个很好的参考资料,记录了在C中使用“.h”文件的模式?

时间:2008-11-01 23:51:58

标签: c design-patterns include

“C接口和实现”显示了数据结构的一些有趣的使用模式,但我确信还有其他的。

http://www.amazon.com/Interfaces-Implementations-Techniques-Addison-Wesley-Professional/dp/0201498413

3 个答案:

答案 0 :(得分:7)

看看戈达德太空飞行中心(NASA)C编码标准(在此URL)。它有一些好的和有趣的指导方针。

我为自己的代码采用的一个特定指南是标题应该是自包含的。也就是说,您应该能够写下:

#include "header.h"

并且代码应该正确编译,包括任何其他必要的头文件,无论之前发生了什么。确保这一点的简单方法是在实现源中包含标头 - 作为第一个标头。如果编译,则标题是自包含的。如果它没有编译,请修复它。当然,这也要求您确保标题是幂等的 - 无论它们包含的频率如何都一样。也有一个标准的习惯用语:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
...operational body of header.h...
#endif /* HEADER_H_INCLUDED */

当然,必须将#define放在文件的顶部,而不是放在底部。否则,如果这个包含的头也包含header.h,那么你最终会得到一个无限循环 - 不健康。即使你决定采用以下策略:

#ifndef HEADER_H_INCLUDED
#include "header.h"
#endif /* HEADER_H_INCLUDED */

在包含标题的代码中 - 建议的做法 - 将警卫也包含在标题中也很重要。


更新2011-05-01

上面的GSFC网址不再有效。您可以在问题Should I use #include in headers的答案中找到更多信息,其中还包含对此问题的交叉引用。

更新2012-03-24

可以通过互联网档案访问和下载引用的NASA C编码标准:

http://web.archive.org/web/20090412090730/http://software.gsfc.nasa.gov/assetsbytype.cfm?TypeAsset=Standard

答案 1 :(得分:1)

Makeheaders是一种有趣的方法:使用工具生成标题。 Makeheaders用于D. R. Hipp的cvstracfossil

答案 2 :(得分:1)

您可能想看看John Lakos的大规模C ++软件设计。