gpt4 book ai didi

c - 将递归 C 结构移植到 Fortran

转载 作者:行者123 更新时间:2023-11-30 17:53:36 26 4
gpt4 key购买 nike

在 Fortran 中定义这个递归 C 结构体的正确方法是什么?

struct OPTION {
char option;
char *arg;
struct OPTION *next;
struct OPTION *previous;
};

我写了这段 Fortran 代码:

module resources
use iso_c_binding
implicit none
type :: OPTION
character(c_char) :: option
character(c_char) :: arg
type(OPTION), pointer :: next
type(OPTION), pointer :: previous
end type OPTION
end module resources

这可以编译,但我认为这是错误的,因为 bind(c)类型定义中丢失。如果我尝试使用 type, bind(c) :: OPTION gfortran 指责 Error: Component 'next' at (1) cannot have the POINTER attribute because it is a member of the BIND(C) derived type 'option' at (2) .

如果我保留type, bind(c) :: OPTION并删除 POINTER我得到的属性 Error: Component at (1) must have the POINTER attribute .

最佳答案

尝试:

   type, bind(c) :: OPTION
character(c_char) :: option
character(c_char) :: arg
type(c_ptr) :: next
type(c_ptr) :: previous
end type OPTION

Fortran 中的 C 指针实际上并不被视为指针,而是被视为完全独立的类型。您必须通过 C_F_POINTER 将它们转换为 Fortran 指针,才能充分利用它们。

关于c - 将递归 C 结构移植到 Fortran,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484377/

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