为什么值放置在 fortran 函数的数组中,而在调用 c++ 函数中不存在
Why are values placed in an array in a fortran function not there in the calling c++ function?
我有一堆Fortran代码,我正在用一些c ++代码进行调整。问题区域基本上可以归结为:
调用 fortran 函数的C++函数:
extern "C"
{
void CALX(float* w, int* nw, double* dw, int* idmx, int* lo);
}
void calcPort(float* w, int* nw, double* dw, int *idmx)
{
int lo[250]; //>100 used for internal stuff
//stuff
CALX(w, nw, dw, idmx, lo);
for(int i=0; i<100; ++i)
{
cout<<lo[i]<<", ";
if(i%50 == 49)
{
cout<<endl;
}
}
//more stuff
}
Fortran函数的重要部分:
SUBROUTINE CALX(W,NW,DW,LO) bind(C, name="CALX") CALX-001
use iso_c_binding
C Lots o' comments
LOGICAL LO(250) CALX-160
DOUBLE PRECISION DW(1) CALX-161
C Bunch o' common blocks
1 READ (5,1000) TITLE CALX-175
C some miscellaneous stuff dealing with a couple special title strings
DO 4 I=1,100 CALX-184
4 LO(I)=.FALSE. CALX-185
READ (5,1001) (LO(I),I=1,50) CALX-186
WRITE (6,*) SIZEOF(LO(1))
WRITE (6,1001) (LO(I),I=1,50)
C IF LO(36)=.TRUE. RETURN TO RESTART A SEARCH SAVED ON TAPE 8 CALX-187
IF (LO(36)) RETURN CALX-188
READ (5,1001) (LO(I),I=51,100) CALX-189
WRITE (6,1001) (LO(I),I=51,100)
C More stuff
在我看来,这应该有效。调用函数后,c++ 代码应以与 fortran 相同的模式读取 0 或非零。相反,我得到的是这个:
来自 fortran 写入语句的这一位(与我重定向到其中的输入相匹配):
FFFFFFTTFFTTFFFTFFFFFFFFFFFTFFTTFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFTTTFTTTFFFFFFFFFFFFFFFFFTTFFFFFFFF
我的循环中的这一部分。
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
显然存在一些沟通失败。为什么?我该如何解决?
C++调用中有五个参数。 您的 Fortran 代码需要四个。
(请注意,USE ISO_C_BINDING
本身不会改变代码的行为。 不过,BIND(C) 确实如此。
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- 代码的效率. 转到和函数调用
- 是同一作用域的函数部分中的函数调用
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 类型擦除的std::function与虚拟函数调用的开销