0

私は2つのCモジュールを持っており、それぞれが他方の機能を使用しています。私のmakefileで、私はこれを次のように表現しました。

moduleA.h: common.h moduleB.h
moduleB.h: common.h moduleA.h

明らかな理由で、これは循環参照警告を生成しますが、正常にコンパイルされます。これを解決する正しい方法は何ですか?モジュールをリファクタリングして、2つを結び付ける3番目のmoduleCを作成する必要がありますか?

モジュールAはロギングモジュールであり、モジュールBはcronjobの実装です。ロギングはcronjobを使用してログのローテーションをスケジュールし、cronjobはロギングを使用してすべての人に何が起こっているかを伝えます。

モジュールCはかなり小さいでしょう。cronjobを作成してロギングローテーション関数を呼び出すだけですが、ロギングはcronjobについて知る必要はありません。もちろん、cronjobは依然としてロギングに依存します。

それとも、警告を無視する必要がありますか?

4

3 に答える 3

0

このようになだめることができます:

#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H

/* Prototypes and others consts and .... */

#endif

この助けを願っています。

よろしく。

于 2012-08-03T16:32:33.337 に答える
0

前提条件に応じてターゲットを再作成する場合を除き、ヘッダー ファイルがターゲット ヘッダー ファイルの前提条件であると述べるのは誤りです。通常、オブジェクト ファイルのターゲットはヘッダー ファイルに依存します。

moduleA.o moduleB.o: common.h moduleA.h moduleB.h
于 2014-04-07T07:57:13.780 に答える