“C 接口和实现”展示了一些有趣的数据结构使用模式,但我相信还有其他的。
3 回答
查看戈达德太空飞行中心 (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 更新
引用的 NASA C 编码标准可以通过 Internet 存档访问和下载:
Makeheaders是一种有趣的方法:使用工具生成标题。Makeheaders 用于 DR Hipp 的cvstrac和化石。
您可能想看看 John Lakos 的大型 C++ 软件设计。