2014-08-27

Fortran でインラインコメントの intent(in/out/inout) を1行に複数書く

今までは Fortran で何かの subroutine を call するとき、

  call subr( &
      &   n       = n &       !! intent(in)
      & , mat_in  = mat_in &  !! intent(in)
      & , mat_out = mat_out & !! intent(out)
  & )

のように書いていた(いる)。コロンの位置が気持ち悪いというのはよく言われるが、今はそこは関係ない(理由は、行単位でのコメントアウトや移動が楽なため)。注目すべきは右にあるインラインコメントによる intent の明示。この書き方、引数が多い時は確かに誤解の余地がなくていいのだが、引数が少ない時は若干煩雑だ。引数3つくらいまでは1行で書いてしまいたい。しかし、引数が2つ以上あるとき、1行にしてしまうと intent(in) がひとつしか書けないのが問題だった。…と思っていた。思いこんでいた。思いこみコワイ。

  call subr( n, mat_in, mat_out ) !! intent(in, in, out)

これでいいじゃん!あるいはセミコロンでもいいか:

  call subr( n, mat_in, mat_out ) !! intent(in; in; out)

C言語系の人にしたらセミコロンは気持ち悪そうだが。

UPDATE 2014-12-03
引数が多いけどそれぞれが短めのとき、

call prep_nc_nf( i, j, nxf, ind,  nc, nf_SW, nf_SE, nf_NW, nf_NE )
!!       intent(in, in, in,  in, out,   out,   out,   out, out   )

とするのを思いついた。これくらいになると安全のために = (イコール)を使いたくなるが…まぁC言語屋さんにはこっちのほうがわかりやすいのかなとか。

No comments: