2

私は設計上の問題に苦しんでおり、自分の状況に対する「ベスト プラクティス」の答えを見つけようとしています。

プログラムでのアクションのログ記録を担当するLogger.c(And )というファイルがあるとします。Logger.h

すべてのモジュールで logger を参照するようにしたいので、各モジュールには #include Logger.h.

NTFS FS との対話を担当するというモジュールがあるとNTFS.cします。このモジュールには、ヘッダーで定義された特別な構造体があります。たとえば、次のようになります。NTFS_Partition.

問題は次のとおりです。

一方では、ロガーが NTFS_Partition のフォーマットされた表現をログ ファイルに出力できるようにしたいと考えてい#include NTFS.hますLogger.h

(Inside Logger.h)

#include NTFS_Partition
VOID Log_Partition(NTFS_Partition *part);

一方、Logger が彼を参照するモジュールを再参照する必要があるかどうかはわかりません。

現在、私は2つの主な選択肢を見ています:

1.Logger.h には NTFS.h が含まれ、NTFS.c には Logger.h が含まれます (これは機能します)。

2. すべてのモジュールで共有され、NTFS 構造体 (NTFS_Partition など) の減速のみを含む、NTFS_Types.h という新しいヘッダー ファイルを作成します。

どうもありがとう、マイケル。

4

2 に答える 2

2

すべての構造体が定義されている共有ヘッダーを作成できます。

// structs.h
struct NTFS_Partition { .. };
struct FAT32_Partition { .. };
struct FAT16_Partition { .. };

に含めますlogger.h

// logger.h
#include "structs.h"
VOID Log_Partition(NTFS_Partition *part);
VOID Log_Partition(FAT32_Partition *part);
VOID Log_Partition(FAT16_Partition *part);

そして、logger.hさまざまなソース ファイルにインクルードします。

// NTFS.c
#include "logger.h"
// FAT32.c
#include "logger.h"
// FAT16.c
#include "logger.h"

C++ では、無関係なさまざまなクラス定義をさまざまなヘッダー ファイルに保持することをお勧めします。しかし、C では、異なる構造体定義を別々のヘッダーに配置するのは、おそらくやり過ぎです。

于 2013-09-06T00:46:33.917 に答える