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

标签 c++ arrays fortran

我有一堆 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/

相关文章:

arrays - 给定一个可以改变数字的符号,找到数组的最小和

fortran - 与实际过程相关的伪参数与伪过程的伪参数不同

oop - 在 Fortran 中使用多态数据类型的文件 IO

c++ - 在C++中输入一个句子

c++ - 在 CBaseRenderer 上实现帧步骤

c++ - C++ 中的虚拟类可以有成员变量吗?

python - Pandas 数据框错误 'StringArray requires a sequence of strings or pandas.NA'

c# - 如何在数组中添加前n个数字C#

Fortran 结构体指针

C++ Boost 启动 FFMPEG 不起作用,可通过终端进行工作