私は C の経験豊富なプログラマーではありませんが、仕事でこの言語を使用して、SunOS と Win32 の両方でコンパイルされる静的ライブラリを構築する必要があります。このライブラリには、いくつかのソース ファイルとそれに対応するヘッダー (たとえばa.c
、 、b.c
、a.h
およびb.h
) しかありません。プロジェクトは両方のプラットフォームでコンパイルされ、ライブラリmylib.a
が生成されます。
私の問題は、実装された関数mylib.a
を他のプロジェクトに公開する方法です。両方を追加するa.h
とb.h
、マクロの再定義エラーが発生するためです。
編集:マクロの再定義エラーは、コンパイルコマンドへのマクロ定義(私のヘッダーとは関係ありません)が原因であることがわかり、解決されました:)それでも、ソースファイルとヘッダーファイルの整理についてアドバイスが欲しいです。
私の疑問は、変更a.h
しb.h
て外部で使用するか、またはこのライブラリのインターフェイスを宣言するために特別にヘッダー ファイルを作成する必要があるかどうかです (たとえばmylib.h
)。元のヘッダーを過度に複雑にしたくはありませんが、別のヘッダーを同期させておく必要はありません...経験豊富なCプログラマーから、パターン、各アプローチの利点、および他に方法があるかどうかについて聞きたいですオプション。
前もって感謝します。
編集:十分な情報を提供していないようです。以下のスキーマは、ファイルがどのように構成されているかを示しています。各コード ファイルにはヘッダーのみが含まれ、各ヘッダーにはガード条件があり、各ヘッダーには共通ヘッダーが含まれ、この共通ヘッダーにはすべてのヘッダーが含まれます。
// a.c ----
#include "a.h"
// b.c ----
#include "b.h"
// a.h ----
#ifndef GUARD_A_H
#define GUARD_A_H
# include "liball.h"
void function_prototypes_implemented_in_a();
#endif // GUARD_A_H
// b.h ----
#ifndef GUARD_B_H
#define GUARD_B_H
# include "liball.h"
void function_prototypes_implemented_in_b();
#endif // GUARD_B_H
// liball.h ----
#ifndef GUARD_LIBALL_H
#define GUARD_LIBALL_H
# include <time.h> // standard headers
# include <stdioa.h>
# include "a.h" // all headers in this project
# include "b.h"
#endif // GUARD_LIBALL_H