FORTRANでプリプロセッサーを使う

TRNSYSのコンポーネント書いてて、デバッグ用にメッセージの処理を入れてたんですが、これってデバッグモードの時だけ出力するようにできないかと思ったので調べてみました。

実際にやってたのは、こんな感じの処理。

    filename = getLUFilename(LU)

    Open (unit=LU,file=filename,action=’READ’,status=’OLD’,err=200)
    Call Messages(-1,’Reding the data file…’,             ’Notice’,CurrentUnit,CurrentType)

単にファイルが開けたか確認したかったので、ファイルの読み込みが始まったらログにメッセージを書き出しています。

デバッグ中はこれでいいんですが、リリースモードでもログに書き出されるのもちょっとうっとおしい。これも含めて、他にも数か所あるので、ログがごちゃごちゃしてて見にくい。

プリプロセッサを使う

Intel Fortranのドキュメント調べたら、どうもC/C++なんかと同じようにプリプロセッサがつかえるらしい!

という事で、こういう時は、#ifdef/#endifで囲んであげればオッケー。

    filename = getLUFilename(LU)
    Open (unit=LU,file=filename,action=’READ’,status=’OLD’,err=200)
#ifdef debug
    Call Messages(-1,’Reding the data file…’,             ’Notice’,CurrentUnit,CurrentType)
#endif

これ使う場合、ちょっと条件があって、

  • ソースコードは自由形式(拡張子.f90)
  • #ifdef/#endifは1カラム目から書く(途中から書くと無視される)

プロパティの設定

それとプロジェクトのプロパティでプリプロセッサの指定も忘れずに!

  • Debugモード
  • Releaseモード
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です