コメントで示唆されているように、1つのアプローチはコンパイラプリプロセッサを使用することです。たとえば、あなたがtest_ver1.F90
(書式自由)またはtest_ver1.F
(固定形式)を作る場合
program main
print *, "current file = ", __FILE__
print *, "current line = ", __LINE__
end program
、あなたはプリプロセッサを起動する方法
current file = test_ver1.F90
current line = 3
を取得します
gfortran test_ver1.F90
./a.out
としてコンパイル使用するコンパイラによって異なりますので、マニュアルを参照してください。 (多くのコンパイラでは、ファイル名が.F90
と.F
などの接尾辞を持っている場合、プリプロセッサが呼び出されます、または-cpp
または-fpp
のようなオプションを使用します。)
本のアプリケーションは、コードチェックを定義することですmymacro.inc
に保存これによりマクロ、例えば
#ifdef __GFORTRAN__
#define _assert_(x) if (.not.(x)) then; print*, "In ",__FILE__,", line ",__LINE__; stop "assertion failed: " // "x"; endif
#else
#define _assert_(x) if (.not.(x)) then; print*, "In ",__FILE__,", line ",__LINE__; stop "assertion failed: " // #x; endif
#endif
、次のプログラム(test_ver2.F90
)
#include "mymacro.inc"
program main
integer :: x, y
x = 7 ; y = 8
_assert_(x == y)
end program main
は、健全性チェックに便利です
In test_ver2.F90, line 6
STOP assertion failed: x == y
できます。
「いいえ」と答えるのではなく(実際には、F77にはプログラムのコードを含むファイルの概念さえありません)代わりに、私は言うでしょう:これはあなたのコンパイラ/プリプロセッサやソース管理システムの仕事のようです。それらについて詳細を述べると、誰かがそれを行うための(非標準的な)方法を与えることができるかもしれません。 – francescalus
大丈夫です!君たちありがとう! –
別のオプションは、ある種の一貫性のある方法で実行ファイルに名前を付けることであるかもしれませんし、 'GET_COMMAND_ARGUMENT'(arg 0)を使ってその名前を得ることができます。 (真剣にf77がついている場合、コンパイラに 'getarg'があるはずです) – agentp