平衡点


2012/09/05

_ Fortran (>=90) での getarg, iargc

他にも良い解説があると思いますが, メモがてらに書いておきます.

プログラム実行時にコマンドライン引数を渡すことは良く行なわれます. FORTRAN77で書かれたプログラムを実行する際にコマンドライン引数を取得するために使われる関数に GETARG, IARGCがあります. IARGC はコマンド引数の数を INTEGER として取得する subroutine, GETARG コマンドライン引数を CHARCTER として取得する subroutine です.

例えば

# source: fortran
PROGRAM TEST_GETARG
  INTEGER I
  CHARACTER ARG*32

  DO I = 1, IARGC()
    CALL GETARG(I, ARG)
    WRITE(*,*), ARG
  END DO
END PROGRAM TEST_GETARG

というように使うことができます. このGETARGはGNU FORTRAN77g77で提供されていたGNU拡張ですが, 他の多くのベンダーコンパイラにおいても使用することができます(多分).

この GETARG, IARGC はFortran 2003 の規格で GET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT として取り込まれました. GNU のドキュメントでも以下のように記載されています.

Description

Retrieve the POS-th argument that was passed on the command line when the containing program was invoked.

This intrinsic routine is provided for backwards compatibility with GNU Fortran 77. In new code, programmers should consider the use of the GET_COMMAND_ARGUMENT intrinsic defined by the Fortran 2003 standard.

[from:GETARG -- The GNU Fortran Compiler]

...あれ? じゃ Fortran90Fortran95は?

今のところGNU Fortran しかり, ベンダーのコンパイラしかりGETARG, IARGC, GET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT, すべて組み込み関数として実装されているみたいですが, それを過信するわけにもいきません. 規格にないし.

というわけで configure 時には必ずこれらの関数が実装されているかのチェックを行なう事になります. 個人的には面倒だなぁ, とは思いますが, まあしょうがないですよね.


連絡先など
最近の日記
  • 2024/06/12
    • 1. wsl2 で systemd
    • 2. wslg の設定
  • 2024/05/21
    • 1. GnuPG が 2.2.43 に更新されて, Emacs の EasyPG でファイルが保存できなくなりました
    • 2. 久々に esup を走らせたら
  • 2024/05/10
    • 1. 特定の文字列を含むRubyスクリプトをEmacsで開くと CPU100% で止まります
  • 2024/04/28
    • 1. CF-SR3 での生活環境構築 (できてない)
  • 2024/03/29
    • 1. Debian GNU/Linux on CF-SR3
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|04|05|06|
Back to Top ▲