[Mpi-forum] MPI compile-time/link-time constants

Jeff Squyres jsquyres at cisco.com
Mon Jan 12 12:31:45 CST 2009

Short version: Are MPI constants defined to be compile-time or link- 
time constants?  (I'm only interested in constants here, like  
MPI_ANY_TAG, not handles like MPI_COMM_WORLD)

Longer version: MPI-2.1:2.5.4 states that values like MPI_ANY_TAG need  
to be able to be used for initialization expressions and assignments.   
But what about switch/case statements?  I ask because we have a  
workaround in OMPI for making MPI::SEEK_SET (and friends) work in Open  
MPI, but by making them link-time constants, not compile-time  
constants.  Hence, you can do this:

   int a = MPI::SEEK_SET;

but you can't do this (it'll fail with a compiler error):

   switch (a) {
   case MPI::SEEK_SET:

Upon closer read on MPI-2.1:2.5.4, I *think* that's actually ok  
because MPI::SEEK_SET is usable for initialization expressions and  
assignments.  There doesn't seem to be a requirement that  
MPI::SEEK_SET (and friends) need to be able to be used in compile-time  
constant expressions (such as switch/case).

Does that sound right to everyone?

Jeff Squyres
Cisco Systems

More information about the mpi-forum mailing list