gpt4 book ai didi

c++ - 为什么值放在 fortran 函数的数组中而不是在调用 c++ 函数中?

转载 作者:行者123 更新时间:2023-11-30 04:08:39 26 4
gpt4 key购买 nike

我有一堆 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 write 语句(与我重定向到其中的输入相匹配):

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++ - 为什么值放在 fortran 函数的数组中而不是在调用 c++ 函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com