賢者あらわる。なるほど。ためしにFortran で

real r
r = 1.0
if sizeof(r) .eq. 8 then
 call mpi_send(...,mpi_double,....)
else
  call mpi_send(...,mpi_float,....)
endif

をつくってみたけど、コンパイル時のオプションで振舞がちゃんと変わった。
例では r は単精度か倍精度かの判定用のダミー、のつもり。
値が空だとなんか気持ちがわるいのでてきとうな値を放りこんでみた。意味はない。