LoginSignup
0
0

More than 5 years have passed since last update.

fortranで文字列の配列を返す関数

Posted at

fortranで文字列の配列を返すような関数を書こうと思ったら少し詰まったのでメモ。
コンパイラはgfortran
そもそもfortranで文字列の配列を宣言するのがちょっとめんどくさく

character(10,3) strings
character,dimension(10,3) strings

なんてのがうまく通らなかったりした。結局文字列の配列は

character*3 strings(10)

なんてので宣言できるんだが、これを返り値にしようとしたら、また一苦労。というのも、Cとかそのたぐいから入った人間なので

integer function hoge()
      hogehoge
end function

みたいな形式しか知らず、この通りにさっきの型宣言を当てはめた

character*3(10) function hoge()
end function

なんてのは当然通らないわけだ。これを解決するのが、関数内で関数の型を宣言する方法で、

function hoge()
      implicit none
      character*3 hoge(10)
       ・・・・・・・
end function

とすれば関数の返り値を宣言できる。そしてメインプログラム内で使おうと思ったその時、更に壁が…
当然メイン内で関数の型を宣言しなくてはならぬのだ。
fortranは正直新しい情報をネットで見つけるのも一苦労で、externalで引用しようとしたが、やはりあの型の書き方だとうまくいかない。どうするかというと

interface
      function hoge()
                  character*3 hoge(10)
      end function
end interface

をメインプログラム内にかく。このinterface宣言、引数の型も決めることができるので、現代はこっちが使われて、externalはむしろ仕様非推奨だそうだ。

fortranは後方互換性を切らないのは利点でもあるが、仕様やらなんやらが混在した闇のプログラムみたいなのが存在するのがなかなかに厳しい。特にimplicitまみれは…辛い…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0