C忽略返回值

C忽略返回值,c,function,return,C,Function,Return,我正在与一个大型MPI项目合作。在其中一个文件中,我们将其称为one.c,我有一个类似这样的函数: #include two.h void foo(){ printf("the value is %f", bar(1)); } 其中,在文件2.h中,除了其他函数def外,我还有: double bar(int); 最后,在文件2.c中,除了其他内容外,我还有: static double a[2] = {0.0,4.0}; double bar(int temp){ retur

我正在与一个大型MPI项目合作。在其中一个文件中,我们将其称为one.c,我有一个类似这样的函数:

#include two.h

void foo(){
  printf("the value is %f", bar(1));
}
其中,在文件2.h中,除了其他函数def外,我还有:

double bar(int);
最后,在文件2.c中,除了其他内容外,我还有:

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

double bar(int temp){
   return a[temp];
}
从上面的代码中,我应该获得4.0,但我始终获得0.0,即使我只是将:

 return 3.0;
我无法理解这个问题,因为即使在两个c中,我也会:

double bar(int temp){
   printf("temp is %d", temp);
   return a[temp];
}
我为temp获得1,[1]也返回4.0。因此,问题在于,没有很好地连接文件之间的值。有什么想法吗

注意:正如我所说,这是一个大型MPI项目。我不打算在这里张贴所有的代码,因为这是不合理的。我只是补充了我认为必要的内容。当然一切都是联系在一起的,否则我就不会问了。我问这个问题是因为这是一件非常奇怪的事情,我认为一些奇怪的事情可能会从我的知识中消失。最后,我意识到,如果我调用two.c中的另一个double函数,那么,如果我再次调用foo函数,我会得到一个好的值,但我仍然不知道为什么,因为正如我所说,bar被识别,temp被识别,而[temp]有正确的值

注2:我认为我的问题是在做makempi时。可能是在保存文件或我制作时,日期没有更新,最后,文件没有再次生成。

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

如果我将文件1.c2.c和2.h添加到您的规范中,请添加

主要条款c:

void foo();
imt main(){ foo(); } 
汇编它们:

for c in *.c; do gcc $c -c; done
联系他们

gcc *.o
然后运行结果

./a.out
我得到:

the value is 4.000000

如果使用,还可以使用所有警告和调试信息进行编译,例如gcc-Wall-Wextra-g。我想你会得到一个警告,这应该是有帮助的。提供一个警告。无法复制。是否可能编译器不知道到2.h的路径?抱歉,我们无法为您调试此错误。问题不在您发布的代码中。这里可能涉及到未定义的行为。使用调试器、断点等。缺少一个.c。最好发布一个完整的可编译的最小示例。