我正在处理一个大型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时,日期没有更新,最后,文件没有重新构建。
答案 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