私は大きなMPIプロジェクトで作業しています。ファイルの一つで、私はこのような機能を持っている(のがone.cとしてそれを呼びましょう):Cは戻り値を無視します
#include two.h
void foo(){
printf("the value is %f", bar(1));
}
どこファイルで、私は(離れて他の機能デフから)持ってtwo.h:
double bar(int);
私は入れていても、私は4.0を入手する必要があり、上記のコードから
static double a[2] = {0.0,4.0};
double bar(int temp){
return a[temp];
}
が、私は常に0.0を得る:
最後に、ファイルtwo.cに私は(離れて他のものから)持って
return 3.0;
two.cに私が行う場合でも、ので、私は問題を理解することはできません。
double bar(int temp){
printf("temp is %d", temp);
return a[temp];
}
私は一時のための1を取得して、[1]また、4.0を返します。だから問題は、ファイル間で値を細かく接続していないことです。何か案が?
注記:私が言ったように、それはBIG MPIプロジェクトです。合理的ではないので、私はここにすべてのコードを掲載するつもりはありません。私は必要なものを追加しただけです。もちろん、すべてがリンクされています。そうでなければ、私はそれを聞かないでしょう。私はそれが非常に奇妙なことであるので私はこれを頼んでいます。結局、私はtwo.c内で別のdouble関数を呼び出すと、私がfoo関数を再度呼び出すと良い値を得ることができても、なぜ私はバーが認識されていたのか、 tempが認識され、[temp]が正しい値を持っていました。
注2:私の問題は、mpiを作るときだったと思います。たぶん、ファイルを保存するときやmakeをやっているときに、日付が更新されず、最後には、再びビルドされていないファイルがあります。
はまた、すべての警告&デバッグ情報でコンパイルする(例えば、 [GCC](http://gcc.gnu.org/)を使用している場合は 'gcc -Wall -Wextra -g')。私はあなたに警告があると思うので、それは助けになるはずです。 –
[mcve]を入力してください。再現できません。 – Stargateur
コンパイラがtwo.hへのルートを知らない可能性はありますか? – ninjaRoche