今までは 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:
Post a Comment