将C结构转换为Fortran等价物

时间:2014-05-26 15:02:53

标签: c struct fortran

我正在将一些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。

任何帮助非常赞赏 杰夫

1 个答案:

答案 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