MPI constants have the same value in all languages, unless specified otherwise. This does not apply to constant handles ( MPI_INT, MPI_COMM_WORLD, MPI_ERRORS_RETURN, MPI_SUM, etc.) These handles need to be converted, as explained in Section Transfer of Handles . Constants that specify maximum lengths of strings (see Section Defined Constants for a listing) have a value one less in Fortran than C/C++ since in C/C++ the length includes the null terminating character. Thus, these constants represent the amount of space which must be allocated to hold the largest possible such string, rather than the maximum number of printable characters the string could contain.
Advice to users.
This definition means that it is safe in C/C++ to allocate a buffer to receive
a string using a declaration like
char name [MPI_MAX_NAME_STRING];( End of advice to users.)
Also constant ``addresses,'' i.e., special values for reference arguments that are not handles, such as MPI_BOTTOM or MPI_STATUS_IGNORE may have different values in different languages.
Rationale.
The current MPI standard specifies that MPI_BOTTOM can be
used in initialization expressions in C, but not in Fortran. Since
Fortran does not normally support call by value, then
MPI_BOTTOM must be in Fortran the name of a predefined
static variable, e.g., a variable in an MPI declared COMMON
block. On the other hand, in C, it is natural to take
MPI_BOTTOM = 0 (Caveat: Defining MPI_BOTTOM = 0
implies that NULL pointer cannot be distinguished from
MPI_BOTTOM; it may be that MPI_BOTTOM = 1 is better ...)
Requiring that the Fortran and C values be the same will complicate
the initialization process.
( End of rationale.)