Привет, я использую код Fortran 90 для вызова функции C. Поскольку я манипулирую адресами, аргументы функции C должны быть правильно сопоставлены в Fortran. Я использую ifort и icc для компиляции кода и работаю на 64-битной машине.
Некоторое тестирование показало, что это будет работать и с int32_t
, хотя во избежание возможных ловушек я хотел бы сохранить uint32_t
Функции C, которые я вызываю, имеют следующие прототипы
uint32_t encode_(uint32_t x, uint32_t y)
uint32_t decode_(uint32_t dec)
Я не могу вызывать эти функции, просто делая что-то вроде
integer :: cod,encode
cod = encode(i,j)
Это произведет тарабарщину. Поэтому я использую обходной путь:
void code2d_(uint32_t j[] ){
uint32_t i;
i=encode_(j[0],j[1]);
// the underscore is due to the FORTRAN naming convention
printf("Coded %10d \n",i);
}
И впоследствии в Фортране
integer :: cod,code2d
cod = code2d(i,j)
Ну, очевидно, у меня есть проблема с несоответствием типов аргументов. К сожалению, я не знаю, как это исправить. Поскольку в моих функциях декодирования/кодирования выполняется арифметика двоичных адресов, очень важно сохранить uint32_t
.