2016-12-20 12 views
-3

私は大きな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をやっているときに、日付が更新されず、最後には、再びビルドされていないファイルがあります。

+1

はまた、すべての警告&デバッグ情報でコンパイルする(例えば、 [GCC](http://gcc.gnu.org/)を使用している場合は 'gcc -Wall -Wextra -g')。私はあなたに警告があると思うので、それは助けになるはずです。 –

+3

[mcve]を入力してください。再現できません。 – Stargateur

+0

コンパイラがtwo.hへのルートを知らない可能性はありますか? – ninjaRoche

答えて

2

#include "two.h"を使用してください。 それは私のために働く。

0

は、私が追加、two.c one.cファイルを作成し、あなたの仕様にtwo.h場合

のmain.c:

void foo(); 
imt main(){ foo(); } 

それらをコンパイルします。

for c in *.c; do gcc $c -c; done 

リンクそれら

gcc *.o 

結果

./a.out 

私が手:

the value is 4.000000 
関連する問題