[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000766] Re: SWIG のチュートリアル



とよだです。

> > 世の中には
> >
> > INTEGER FUNCTION FOO(A)
> >  FOO = expression
> >
> > と
> >
> > SUBROUTINE FOO(RESULT, A)
> >   RESULT = expression
> >
> > が等価な Fortran コンパイラなんてものも存在します。

おっと、RESULT に INTEGER 型宣言が落ちています。まあそれはおいておいて、

> ところで、例に挙げられたFORTRANコンパイラだと両方ともCからみると
> void foo(int *result, int *a);
> のようなコードを生成するのでしょうか?
> そうだとするとg77の生成するコードとは違って、
> CHARACTER*やCOMPLEX等と扱いが同じでこっちのほうが納得がいくような気も。

おっしゃるとおりです。確か日立だったから名前は FOO かもしれません。
頭は使わなくていいんですが、余所に行くと破滅するという....

そうそう、富士通九州ソフトウェアの Fortran コンパイラでしたっけ、

SUBROUTINE FOO(C1, C2)
    CHARACTER(*) C1, C2
END SUBROUTINE

が

void foo_(char *c1, char *c2, long c1len, long c2len)

でなくて

void foo_(char *c1, long c1len, char *c2, long c2len)

になってしまうというコンパイラオプションがあるんですが、これって一体何との
互換性を目指してついているんでしょうね?
私の知る限りデフォルトで後者になっちゃう処理系って知らないんですが....

こういうマニアックな知識の集成のひとつに、netCDF や
udunits が使っている `cfortran.h' なんてのがあるのですが、これがまた
えらくおどろおどろしい cpp マクロの集合でして、サポート処理系も
いまひとつ現代的でないし、もうちょっと今様に集大成されないといかんと
思っています。