有什么好的参考资料记录了在C中使用“.h”文件的模式?
“C接口和实现”显示了数据结构的一些有趣的使用模式,但我确信还有其他的。
http://www.amazon.com/Interfaces-Implementations-Techniques-Addison-Wesley-Professional/dp/0201498413
查看戈达德太空飞行中心(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 URL不再有效。 您可以在问题的答案中找到更多信息。 我应该在标题中使用#include ,其中还包含对此问题的交叉引用。
更新2012-03-24
可以通过Internet存档访问和下载引用的NASA C编码标准:
Makeheaders是一种有趣的方法:使用工具生成标题。 Make Hader用于DR Hipp的cvstrac和化石 。
您可能想看看John Lakos的大规模C ++软件设计。