C忽略返回值

时间:2016-12-20 17:09:58

标签: c function return

我正在处理一个大型MPI项目。在其中一个文件中(让我们称之为one.c)我有一个像这样的函数:

double bar(int);

我在文件two.h中的位置(除了其他函数def):

static double a[2] = {0.0,4.0};

double bar(int temp){
   return a[temp];
}

最后,在文件two.c中我(除了其他东西):

 return 3.0;

从上面的代码我应该获得4.0,但我总是得到0.0,即使我只是把:

double bar(int temp){
   printf("temp is %d", temp);
   return a[temp];
}

我无法理解这个问题,因为即使在two.c中我也这样做:

{{1}}

我获得1为临时,[1]返回4.0。所以问题是没有连接文件之间的价值。有什么想法吗?

注意:正如我所说,这是一个大型MPI项目。我不会在这里发布所有代码因为不合理。我只是添加了我认为必要的内容。当然一切都是联系在一起的,否则我不会问。我问这个是因为这是一个非常奇怪的事情,我虽然有些奇怪的东西可以从我的知识中掠过。最后,我意识到如果我在two.c中调用另一个双重函数,那么,如果我再次调用我的foo函数,我获得了良好的价值,但我仍然不知道为什么因为正如我所说,bar被识别, temp已被识别,[temp]具有正确的值。

注意2:我认为我的问题是在制作mp mp时。也许在保存文件或我正在进行make时,日期没有更新,最后,文件没有重新构建。

2 个答案:

答案 0 :(得分:2)

使用#include "two.h"。 否则它对我有用。

答案 1 :(得分:0)

如果我根据您的规范制作文件one.c two.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