Следующие две процедуры предназначаются в Си для преобразования из представления ФОРТРАН (массив целых чисел) в представление Си (структура), и наоборот. Происходит преобразование всей информации в представлении, включая ту, которая скрыта. То есть никакая информация представления не потеряна в преобразовании.
int MPI_Status_f2c(MPI_Fint *f_status, MPI_Status *c_status)
Если f_status
- действительное представление ФОРТРАН, но не значение
MPI_STATUS_IGNORE
или MPI_STATUSES_IGNORE
для ФОРТРАН , то
MPI_Status_f2c
возвращает в
c_status
действительное представление Си с тем же самым содержанием.
Если f_status
- значение MPI_STATUS_IGNORE
или
MPI_STATUSES_IGNORE
для ФОРТРАН , или если f_status
- не
действительное представление ФОРТРАН, то вызов ошибочен.
Представление Си имеет тот же самый источник, идентификатор и значения кода ошибки, как и представление языка ФОРТРАН, и возвращает те же самые ответы когда делается запрос для индекса, элементов, и отмены. Функция преобразования может вызываться с аргументом представления ФОРТРАН, который имеет неопределенное поле ошибки, когда значение поля ошибки в аргументе представления Си неопределено.
Две глобальные переменные типа MPI_Fint*
,
MPI_F_STATUS_IGNORE
и MPI_F_STATUSES_IGNORE
объявлены в mpi.h
. Они могут использоваться, чтобы проверить в Си,
является ли f_status
значением MPI_STATUS_IGNORE
или
MPI_STATUSES_IGNORE
языка ФОРТРАН, соответственно. Эти
глобальные переменные - не константные выражения Си и не могут
использоваться в местах, где Си требует постоянных выражений. Их значение
определено только между вызовами MPI_INIT
и MPI_FINALIZE
и не
должно быть изменено кодом пользователя.
Чтобы делать преобразование в другом направлении, мы имеем следующее:
int MPI_Status_c2f(MPI_Status *c_status, MPI_Fint *f_status)
Этот вызов преобразовывает представление Си в представление ФОРТРАН, и
имеет поведение, подобное поведению вызова MPI_Status_f2c
.
Это означает, что значение c_status
не должно быть
ни MPI_STATUS_IGNORE
ни MPI_STATUSES_IGNORE
.
Совет пользователям: Отдельной функции преобразования для массивов представлений нет, так как можно просто организовать цикл через массив, преобразовывая каждое представление. []
Объяснение:
Обработка MPI_STATUS_IGNORE
требует уровня библиотек только с
упаковщиком Си: если вызов ФОРТРАН передал MPI_STATUS_IGNORE
,
то упаковщик Си должен обработать его правильно. Обратите внимание, что эта
постоянная не имеет то же самое значение в языках ФОРТРАН и Си. Если
MPI_Status_f2c
должен был обработать MPI_STATUS_IGNORE
,
то тип его результата должен быть MPI_Status**
, который
рассматривался нижним решением. []