Константы MPI имеют одинаковое значение на всех языках, если не
определено иначе. Это не относится к постоянным указателям (MPI_INT
,
MPI_COMM_WORLD
, MPI_ERRORS_RETURN
, MPI_SUM
и т.д.). Эти указатели должны быть преобразованы, как объяснено в Разделе
4.12.4. Константы, которые определяют максимальные длины строк (смотрите
Раздел A.2.1), имеют значение на 1 меньше в ФОРТРАН, чем в Си/С++, так
как в Си/С++ длина включает нулевой оконечный знак. Таким
образом, эти константы представляют количество пространства, которое должно быть
распределено, чтобы содержать максимально возможную такую строку, а не
максимальное число печатаемых символов, которые строка могла бы содержать.
Совет пользователям: Это определение означает, что в Си/С++ безопасно распределять буфер, чтобы получить строку, используя подобное объявление
char name [MPI_MAX_NAME_STRING];
Также ``адресные'' константы, то есть специальные значения аргументов ссылки,
которые не являются указателями, типа MPI_BOTTOM
,
MPI_IN_PLACE
, MPI_STATUS_IGNORE
и
MPI_STATUSES_IGNORE
могут иметь различные значения на
различных языках.
Объяснение:
Текущий стандарт MPI определяет, что MPI_BOTTOM
может
использоваться в выражениях инициализации в Си, но не в языке ФОРТРАН. Так
как ФОРТРАН обычно не поддерживает вызов по значению, тогда
MPI_BOTTOM
должна быть в ФОРТРАН именем предопределенной
статической переменной, например, переменная в MPI-объявленном блоке
COMMON
. С другой стороны, в Си естественно брать
MPI_BOTTOM = 0
(Предостережение: Определение MPI_BOTTOM = 0
подразумевает, что указатель NULL
не может быть отличен от
MPI_BOTTOM
; может быть, что MPI_BOTTOM = 1
- лучше ...).
Требование, чтобы значения ФОРТРАНА и Си были одинаковыми,
усложняет процесс инициализации. []