我正在将一些C代码翻译成Fortran&我碰到了一些让我摸不着头脑如何正确地将C转换为Fortran的实例。
示例#1-
typedef struct fileheadtype
{
char version[128];
char notes[256];
} FileHeadType;
typedef struct linetype
{
LineInfo info;
float latlon[50];
} LineType;
typedef struct vg_dbstruct
{
VG_HdrStruct hdr;
union
{
FileHeadType fhed;
LineType lin;
} elem;
} VG_DBStruct;
我理解'fileheadtype'和'linetype'结构,但我不明白vg_dbstruct正在做什么,它如何与其他两个结构相关以及如何正确转换为Fortran。
示例#2-
typedef struct breakpt_t { /* break point structure */
float lat;
float lon;
char breakPtName[ 100 ];
} Breakpt_T;
enum tca_adv_t {
WATCH = 0,
WARNING = 1
};
typedef struct tcaww_t {
enum tca_adv_t advisoryType;
int numBreakPts;
struct breakpt_t *breakPnt;
} TcaWw_T;
在这里,我不明白枚举操作在tcaww_t结构中做了什么,也没有“breakpt_t”结构正在做什么,以及...如何转换为Fortran。
任何帮助非常赞赏 杰夫
答案 0 :(得分:3)
Typedef是Fortran所不具备的。它使您可以通过不同的名称调用某种类型或结构。你甚至可以做
typedef int myint;
并使用myint作为类型名称
myint i;
使用示例一,您可以使用
FileHeadType fh;
而不是
struct fileheadtype fh;
将转换为type(fileheadtype)
。
在Fortran中,您始终需要使用原始类型,无论是integer
还是type(typename)
。
Fortran for C互操作性中存在枚举,但如果您不想调用C,但只是使用Fortran精神进行翻译,则可以使用整数:
integer, parameter :: WATCH = 0, WARNING = 1
联盟不属于Fortran,您必须研究代码的意图并使用两个单独的组件,或使用transfer()
或equivalence
。