1

私が抱えている問題は、Cヘッダーファイルの循環依存の問題です...周りを見回したところ、解決策は前方定義に関係していると思われますが、リストされている同様の問題はたくさんありますが、私が必要とする情報を提供しているようには見えませんこれを解決...

次の 5 つのソース ファイルがあります。

// fwd1.h
#ifndef __FWD1_H
#define __FWD1_H

#include "fwd2.h"

typedef
  struct Fwd1 {
    Fwd2  *f;
 }
Fwd1;

void  fwd1 (Fwd1 *f1,  Fwd2 *f2) ;

#endif // __FWD1_H

.

// fwd1.c
#include "fwd1.h"
#include "fwd2.h"
void  fwd1 (Fwd1 *f1,  Fwd2 *f2)  { return; }

.

// fwd2.h
#ifndef __FWD2_H
#define __FWD2_H

#include "fwd1.h"

typedef
  struct Fwd2 {
    Fwd1  *f;
  }
Fwd2;

void  fwd2 (Fwd1 *f1,  Fwd2 *f2) ;

#endif // __FWD2_H

.

// fwd2.c
#include "fwd1.h"
#include "fwd2.h"
void  fwd2 (Fwd1 *f1,  Fwd2 *f2)  { return; }

.

// fwdMain.c
#include "fwd1.h"
#include "fwd2.h"
int  main (int argc, char** argv, char** env)
{
  Fwd1  *f1 = (Fwd1*)0;
  Fwd2  *f2 = (Fwd2*)0;

  fwd1(f1, f2);
  fwd2(f1, f2);

  return 0;
}

次のコマンドでコンパイルしています:gcc fwdMain.c fwd1.c fwd2.c -o fwd -Wall

コンパイル エラーを解決するためにいくつかのアイデアを試しましたが、エラーを他のエラーに置き換えることしかできませんでした ...コードへの変更を最小限に抑えて循環依存の問題を解決するにはどうすればよいですか? ...理想的には、コーディング スタイルの問題として、コード全体に「構造体」という言葉を入れないようにしたいと考えています。

4

4 に答える 4