編輯:Gfortran 6現在支持這些擴展:)轉換FORTRAN DEC 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
我的想法thusfar:
- 以某種方式替換fortran EQUIVALENCE。
- 定義結構中的C/C++,並以某種方式使他們的Fortran代碼可見(懷疑,這是可能的)
我想,一定有很多F77的重構,以F90/95當UNION和MAP被排除在標準之外。如何處理這件事?
編輯:接受的答案有一個解決方法,以允許內存重疊,但至於保留API,這是不可能的。
你真的需要使用gfortran?英特爾Fortran編譯器支持UNION/MAP擴展。其他商業編譯器也可能支持它。 gfortran文件說他們應該支持它,並且如果有人有時間的話可能會得到它。 – WaywiserTundish