FORTRANでプリプロセッサーを使う
2013年8月20日
2019年4月15日
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モード