Проблема вызова C на Фортран - PullRequest
3 голосов
/ 24 апреля 2009

Использование Visual Studio 9 в Windows 64 с Intel Fortran 10.1

У меня есть функция C, вызывающая Fortran, передающая буквальную строку "xxxxxx" (не завершенную нулем) и скрытую передаваемую длину arg 6.

Fortran понимает это правильно, так как отладчик распознает его как символ (6) var и имеет правильную строку, но когда я пытаюсь назначить ему другой символ Fortran * 6 var, я получаю странную ошибку.

forrtl: severe (408): fort: (4): Variable Vstring has substring ending point 6 which is greater than the variable length 6

- C call -

SETPR("abcdef",6);

- подпрограмма Fortran -

subroutine setpr(vstring)

character*(*) vstring

character*6 prd

prd(1:6) = vstring(1:6)

return

end

1 Ответ

1 голос
/ 27 апреля 2009

Я попробовал это с компилятором Intel C и компилятором Intel Fortran. Это дало, в C,

#include <stdio.h>

int main(void)
{
    extern void test_f_(char*, int);

    test_f_("abcdef",6);
}

, а в Фортране

subroutine test_f(s)
    implicit none
    character*(*), intent(in) :: s

    character*6 :: c

    write (*,*) 'S is ', s
    write (*,*) 'Length of S is', len(s)

    c = s
    write (*,*) 'Implicit-copied C is ', c

    c(1:6) = s(1:6)
    write (*,*) 'Range-copied C is ', c
end subroutine test_f

При компиляции и запуске выдает

S is abcdef
Length of S is           6
Implicit-copied C is abcdef
Range-copied C is abcdef

Какова ваша декларация в подпрограмме C для типа подпрограммы Fortran? Вы уверены, что размеры символьных и целочисленных переменных одинаковы в коде C и на языке Fortran?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...