2009-08-25 2 views
2

У меня есть функция в C. Я хочу вызвать эту функцию из Fortran. Эта функция содержит 2 структуры, переданные указателем. Как это сделать в Fortran?Фортран структуры и указатели

Ex:

struct a 
{ 
    int x; 
    float y; 
}; 

struct b 
{ 
    int p; 
    float q; 
}; 

В C:

fun(*a,*b); 

Как я называю это из Fortran? Здесь a - структура ввода, а b - структура вывода. Я могу заполнить структуры в Fortran, но они не могут поддерживать какие-либо данные после прохождения.

Как позвонить fun(*a,*b) в Фортран?

ответ

0

Ответ будет зависеть от версии Fortran, которую у вас есть. Например, в gnu вы можете использовать функцию C_LOC для получения адреса.

1

Если вы используете последнюю версию Fortran, тогда должна быть поддержка структур или записей, которые должны позволить вам напрямую вызвать C. Если вы используете Fortran77 или ранее, я бы написал метод интерфейса в C, который принял 4 аргумента, 2 для представления содержимого struct a и 2 для представления struct b. Процедура интерфейса обрабатывала бы совокупность входной структуры и получала бы результаты от выходной структуры до аргументов. У меня возникло бы желание сделать это даже с помощью современной версии Fortran, чтобы избежать потенциальных проблем с распределением памяти и освобождением. Например, если Fortran будет возвращать память, выделенную в C, Fortran может не освободить ее.

Смежные вопросы