以下のテストプログラム argtest.f *1コンパイルしてみる。環境はcolinux + ifort 9.1, g77(gcc バージョン 3.4.6 Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9))

        program argtest
        integer iargc
        external iargc
        character(LEN=120) argv

        do i=1, iargc()
                call getarg(i, argv)
                write(*,*) argv
        enddo
        end program

このソースは、g77でもifortでも使える引数処理機構らしい。iargc() が引数の数を返す関数、getarg(i, argv)がi番目の引数をバッファargvに渡す手続きなのだろう。


ifortの場合。

cobodo@localhost ~ $ ifort argtest.f
cobodo@localhost ~ $ nm a.out | grep [^l]arg
08098920 b argtest_$ARGV.0.0
0809bc60 B for__a_argv
0807b0fa T for__close_args
0809bc5c B for__l_argc
0809622c D for__l_current_arg
0805c15c T for__open_args
080520ec T for_getarg
080521a4 T for_getarg_i2
08052334 T for_getcmd_arg
080520dc T for_iargc
080520d0 T for_nargs
0805229c T getarg_
0805227c T iarg_
0805226c T iargc_
08052260 T nargs_
0805228c T numarg_

g77の場合。

cobodo@localhost ~ $ g77 argtest.f
cobodo@localhost ~ $ nm a.out | grep [^l]arg
         U G77_getarg_0
         U f_setarg
         U iargc_

grepの引数は、単に"arg"だと"largest〜"がいくつか引っかかったため、こうしてあります。


さて。g77 の方に f__xargc, f__xargv がないのはどういうことなんだろう。別の処理機構が存在するのか?
ifortの方は、恐らく for__a_argv が f__xargv に、for__l_argc が f__xargc に当たるのではないだろうか。nmのmanを見ると、'B'は"uninitialized data section"とのことなので。'D'は"initialized data section"、'T'は"text (code) section"、'U'は"undefined"らしい。小文字'b'は書いてないんだけど……