gpt4 book ai didi

c - 将 C 结构翻译为 Fortran 等价物

转载 作者:行者123 更新时间:2023-12-04 12:35:37 24 4
gpt4 key购买 nike

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

非常感谢任何帮助杰夫

最佳答案

Typedef 是 Fortran 所没有的。它使您能够使用不同的名称来调用某些类型或结构。你甚至可以做

 typedef int myint;

并使用 myint 作为类型的名称

 myint i;

在示例中,您可以使用

 FileHeadType fh;

代替

 struct fileheadtype fh;

这将转换为 type(fileheadtype)

在 Fortran 中,您始终需要使用原始类型,无论是 integer 还是 type(typename)

Fortran 中存在枚举用于 C 互操作性,但如果您不想调用 C,而只是按照 Fortran 精神进行翻译,则可以只使用整数:

integer, parameter :: WATCH = 0, WARNING = 1

union 不是 Fortran 的一部分,您必须研究代码的意图并使用两个单独的组件,或者使用 transfer()equivalence

关于c - 将 C 结构翻译为 Fortran 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23872990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com