.hファイルと.cファイルのリンクに問題があります。この問題に関するスレッドもいくつか読んでいますが、それらはすべて少しあいまいですが、それでもその概念を完全に理解することはできません。また、リンクの問題がたくさんあります。 、私がacで使用するbcとbhを持っていて、bhをacとbcの両方に含めるかどうか混乱しているとしましょう。cuzbc自体がbhで定義された構造を知る必要があります。私は、bhでプロトタイプを持ち、定義されている関数を持っています。 bhの構造も使用するbcでは、imはbc cuzにbhを含めていません。これは、bhがbcの関数を使用するacへのインターフェイスに似ていることを知っているためです。ここでより明確な例
bhファイル
typedef struct{
int x, y;
}myStruct;
void funct1(myStruct);
void funct2(myStruct);
bcファイル
void funct1(myStruct x)
{
//do something
}
void funct2(myStruct y)
{
//do something
}
acファイル
#include "b.h"
int main()
{
myStruct x;
funct1(x);
funct2(y);
return 0;
}
cygwinでコマンドを実行しました:gcc bc ac -g
紛らわしい部分ですが、リンクエラーが発生しました。bcをコンパイルすると、bh Cuzの構造とプロトタイプを検出できません。私が知っているのは、bhを使用してacからbcをリンクすることだけですが、両方の.cをコンパイルすると、そのbcはその構造とプロトタイプを見つけることができません、
なぜbcにbhを含めなかったのですか? 回答:Cuzは私が知っていることですが、bhはすでにacに含まれており、bcに再び含めると、ダブルインクルージョンを実行します<---これまでに学んだことであり、#ifdefがあることはわかっていますが、それはうまくいきません、多分私はまだそれを使う方法を知りません、あなたが知っているならば、これについて気軽に話し合ってください。
これをどうやって進めるかについて何か考えがあれば、遠慮なく教えてください。
#ifdefディレクティブがありますが、これを行う方法がわからないようです。
注:上記のすべてのコードが構文的に正しいと仮定します。スペルミスのある単語がある場合は無視してください。私は.hと.cの間にインクルードした後のみです。