【问题标题】:How to prepare a fortran module from a C header file?如何从 C 头文件准备一个 fortran 模块?
【发布时间】:2016-06-07 07:52:05
【问题描述】:

我有这个纯 C 文件,其中包含 6 个函数,我想让 fortran 程序员可以使用:

http://tinyfiledialogs.sourceforge.net

C 到 Fortran“导入”可以工作吗?

我是否应该简单地准备类似 Fortran 头文件的东西?

我意识到我的 C 代码正在使用多个 Unix 或 Windows C 头文件,这会使转换变得复杂。但是,为 6 个 C 函数提供相当于 Fortran 标头的功能肯定是可以实现的。

char const * tinyfd_inputBox (
    char const * const aTitle ,
    char const * const aMessage ,
    char const * const aDefaultInput ) ; 
   // the returned value is a static array

edit:我开始意识到模块实际上是依赖于编译器的。 也许我应该准备一个生成 C 目标文件和 fortran 模块的 makefile 来使用它。

【问题讨论】:

  • 如果您想回答您的问题,请显示代码。不是指向天使害怕踏入的一些狡猾的、非 SO 的暗网网站的链接。但在您考虑您的问题的话题性之前 - C 到 Fortran 的翻译可以工作吗?当然可以,但你是什么意思?能不能把C翻译成Fortran(我不知道),有没有把C翻译成Fortran的程序(是的,有这样的程序,都是可笑的,工具推荐跑题了)。
  • 在fortran中有一个用于绑定C的完整标签,您可能需要查看fortran-iso-c-binding
  • 对于所有碰巧也是标签的词,不必使用code highlighting。它实际上会损害阅读文本。将其用于代码(变量、函数名......)。您有时可以使用[tag:tag_name],但不要过度使用它。
  • 编译的模块确实依赖于编译器(可能还有版本),但源模块文件不是,所以正如你所说,只需在你的 makefile 中添加一个构建规则并分发 fortran 源文件就可以解决这个问题。

标签: c fortran fortran-iso-c-binding


【解决方案1】:

如果您的目标是让 fortran 程序员的生活更轻松,并帮助他们直接在他们的程序中使用您的 C 代码,那么您可能希望考虑生成提供 接口的 fortran 模块。这些与您的示例标题有些相似,因为它们定义了例程类型以及所需的输入和输出。

我在这方面不是特别有经验,所以我不会在这里给出具体的例子,但我会推荐你​​this site。另一个有用的信息来源是查看其他包是如何做到这一点的,例如netcdfPETSc

【讨论】:

  • 请随时编辑此答案以包含一个示例,我会在有时间时尝试这样做,但可能不会有一段时间。
  • 这正是我的目标:帮助 fortran 程序员使用我的 c 库。我想准备 fortran 模块文件,以便轻松集成到他们的 fortran 代码中,但他们必须为他们的平台编译 C 文件。
  • @lalala 您可能希望在原始问题中更明确地说明这一点,我花了一点时间才意识到这是问题而不是“我如何从 fortran 调用 C”。
猜你喜欢
  • 2012-01-16
  • 2019-05-16
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多