1

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

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

4

3 回答 3

8

查看戈达德太空飞行中心 (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 存档访问和下载:

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

于 2008-11-02T02:51:24.963 回答
1

Makeheaders是一种有趣的方法:使用工具生成标题。Makeheaders 用于 DR Hipp 的cvstrac化石

于 2008-11-02T00:06:25.000 回答
1

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

于 2008-11-02T02:24:50.197 回答