編集:Gfortran 6はこれらの拡張機能をサポートするようになりました:)
UNION と MAP を多用する古い f77 コードがあります。これらの拡張機能をサポートしていない gfortran を使用してこれをコンパイルする必要があります。これらを除いて、サポートされていないすべての拡張機能を変換する方法を見つけましたが、途方に暮れています。可能なアプローチについていくつか考えましたが、何もうまく実装できませんでした。現在と同じ方法で既存の UDT にアクセスする必要があります。UDT を再実装することはできますが、それらのインターフェイスは変更してはなりません。
私が持っているものの例:
TYPE TEST
UNION
MAP
INTEGER*4 test1
INTEGER*4 test2
END MAP
MAP
INTEGER*8 test3
END MAP
END UNION
END TYPE
要素へのアクセスは、次の方法で利用できる必要があります: TEST%test1、TEST%test2、TEST%test3
これまでの私の考え:
- 何らかの形で fortran EQUIVALENCE に置き換えます。
- C/C++ で構造体を定義し、何らかの形で FORTRAN コードから見えるようにします (これが可能かどうかは疑問です)。
UNION と MAP が標準から除外されたとき、f77 から f90/95 への多くのリファクタリングが行われたに違いないと思います。これがどのように処理された/処理された場合はどうなりますか?
編集:受け入れられた回答には、メモリのオーバーラップを許可する回避策がありますが、API を保持する限り、それは不可能です。