1

「C インターフェイスと実装」には、データ構造の興味深い使用パターンがいくつか示されていますが、他にもあると確信しています。

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

4

3 に答える 3

8

ゴダード宇宙飛行センター (NASA) の C コーディング標準 (このURL ) を参照してください。いくつかの優れた興味深いガイドラインがあります。

私が独自のコードに採用した特定のガイドラインの 1 つは、ヘッダーは自己完結型であるべきだというものです。つまり、次のように記述できる必要があります。

#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 コーディング標準は、インターネット アーカイブからアクセスしてダウンロードできます。

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

于 2008-11-02T02:51:24.963 に答える
1

JohnLakosによる大規模C++ソフトウェア設計をご覧になることをお勧めします。

于 2008-11-02T02:24:50.197 に答える
1

Makeheadersは興味深いアプローチです。ツールを使用してヘッダーを生成します。Makeheadersは、DR Hipp のcvstracとFossil で使用されています。

于 2008-11-02T00:06:25.000 に答える