我们还需要子程序吗? [关闭]

2023-12-29

在 Fortran 中,函数和子例程之间存在明显的区别:函数返回一个值,子例程不返回任何值。这引入了两者之间的一系列差异。一个例子是调用语义:您可以像在其他语言中一样调用函数,但是为了调用子例程,您必须发出call首先声明。

随着 Fortran95 中添加的指针和数据类型,使任何子程序成为函数以及保留子例程仅用于遗留似乎不再存在技术限制。函数可以返回零(您只返回一个虚拟整数)、一个或多个值(例如,您可以返回指向已分配类型实例的指针,如 C++ STL 对)。

我错了吗?由于子例程具有而函数没有的某些功能,我们在 Fortran 编程中是否仍然需要子例程?


如果您搜索 comp.lang.fortran 档案,您会找到有关函数语义的讨论。 IIRC 事实证明,标准中没有明确规定对于具有副作用的函数,什么是允许的,什么是不允许的。

例如,编译器可以优化吗?

x = foo(参数) + foo(参数)

into

x = 2 * foo(参数)

或者再举一个例子,考虑

x = y + foo(y)

如果 foo() 改变 y 的值怎么办?请记住,Fortran 没有 C 语言中的序列点概念。

一般来说,一些专家的建议是仅使用纯函数,否则使用子例程。而且,这也是我自己遵循的建议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们还需要子程序吗? [关闭] 的相关文章

  • ipython 和 ipython 笔记本之间奇怪的准确度差异,然后使用 fortran 模块和 f2py

    当使用用 f2py 编译的 fortran 模块时 我遇到了 ipython 和 ipython 笔记本之间奇怪的准确性差异 我的 Fortran 模块是 subroutine tt string fmt n num out implici
  • 使用泰勒展开式计算正弦的程序不起作用?

    我正在尝试编写一些代码 使用泰勒展开计算 sin 0 75 的值 并打印每次迭代 直到使用展开计算的值与使用 Fortran 的内在 sin 函数计算的值之间的绝对差为小于1E 6 这是我的代码 program taylor implici
  • 从接口访问参数 (Fortran)

    我正在使用参数来修复所用类型的精度 在我尝试在接口中使用相同类型之前 这种方法工作得很好 考虑这个小例子 module Hello implicit none save integer parameter K selected real k
  • 在 Fortran 95 中按值传递参数

    如何在调用函数参数时保留其值而不创建新变量 这就是 如何按值传递参数 在此示例代码中 program what implicit none integer a b c d a 1 b 2 c 3 print a b c d f val a
  • 定义派生类型数组

    我正在尝试使用参数声明初始化派生类型 当我编译时 出现以下错误 1 处的 INTEGER 4 数组构造函数中的元素是 CHARACTER 1 用户定义的种类值ip and dp被发现于fasst global 他们是 integer par
  • 使用 Iso_Fortran_Env 设置函数的 Kind 值

    如何使用 ISO Fortran Env 的内在函数以 Fortran 2008 惯用的方式设置函数的返回 KIND 值 通常在主程序中 我可以使用 ISO Fortran 内在函数 如下所示 program name here use i
  • fortran 77 到 fortran 90 的转换器软件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有 fortran 77 编码 但我想转换为 fortran 90 在哪里可以下载转换器软件 这是我帮
  • 大多数编译器都会优化 MATMUL(TRANSPOSE(A),B) 吗?

    In a Fortran program I need to compute several expressions like M v MT v MT M M MT etc Here M and v are 2D and 1D arrays
  • 如何为 Fortran 95+ 模块库提供显式接口,并隐藏实现

    我正在使用 gfortran 的 95 扩展 我有一个实用程序模块库 我想链接到其他项目 即作为库或共享对象 dll 但是 在 Fortran 中 我不明白如何在不维护模块接口的两个副本的情况下将接口与 Fortran 中的实现分离 在 C
  • C++/Fortran 中贝塞尔函数的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Fortran 或 和 C 中对包含贝塞尔函数的方程进行从 0 到 无穷大 的数值积分 我在matlab中做了 但对于较大的输入和特
  • 在 Fortran 90 中,是否必须事先声明数组维度?

    是否有必要在任何其他代码之前声明数组维度 例如 我编写了以下简化的示例代码 PROGRAM mytest IMPLICIT NONE INTEGER i j k mysum Let array c be a k by k 2 array D
  • 如何使用模块向 Fortran 公开 Python 回调

    这个 scipy 文档页面 http docs scipy org doc numpy dev f2py python usage html call back arguments关于 F2Py 指出 回调函数 也可以在模块中显式设置 然后
  • Fortran:向文件添加列(即跳过不同数量的水平空格)

    我是 Fortran f90 的初学者 一些看似简单的问题结果却导致严重头痛 感谢您帮助我解决这个问题 我的代码运行一个循环 处理数据并将它们写入文件 我希望将这些数据写入同一文件的列中 直到循环完成 OPEN unit 11 file f
  • 时间数组在建模中超出范围?

    这些天我正在尝试使用新的气象数据 以 netcdf 格式而不是旧的 cray 格式给出 运行我的气候模型 模型编译顺利 但是当进行模拟时 模型在第一天运行良好 但在模拟的第二天就停止了 总是在同一时间步长 无论我使用哪个开始日期 错误是 f
  • 编译错误:无法打开模块文件

    我有这个代码 PROGRAM xfit driver for routine fit USE nrtype USE nrutil USE nr USE ran state ONLY ran seed IMPLICIT NONE INTEGE
  • 如何在 conda 中静音或抑制 gfortran (或 clang?)后端?

    我一直致力于构建一个非常特殊的 conda 环境 专为python and R与串扰使用rpy2 我想出的方法可以安装正确的R包如下 install main environment sh now date T echo Start Tim
  • 在一条语句中对多个变量进行相同的赋值

    有没有一种方法可以为不同的变量分配相同的值 而无需在单个语句中构造数组 例如 如果我有变量a b c d and e 我可以分配类似的东西吗 a b c d e 10 0 我知道我可以用一行来做 a 10 0 b 10 0 c 10 0 d
  • Fortran 在 gdb 中打印可分配数组

    我正在向开源科学代码添加一些功能 我使用很多可分配项 但在正确打印它们时遇到一些问题 例如 我声明并分配 然后使用 real dp allocatable psi n phi some other stuff here allocate p
  • 识别操作系统

    我在 Intel 编译器上的 Fortran 90 代码取决于它运行的操作系统 例如 if OS win7 then do X else if OS linux then do y end if 我如何以编程方式执行此操作 您可以使用预处理
  • 有没有一种简单的方法来准备 Fortran 代码以进行并行调用

    我想使用 OpenMP 在 C 程序中并行求解多个大型 ODE 系统 由于某些原因 我需要使用 ODE 求解器 但我只能找到 Fortran 90 子例程 而且代码太大 无法简单地将其转换为 C 我知道 Fortran 广泛使用静态内存 因

随机推荐

  • 如何将 json 数据绑定到现有视图模型 - mvc5

    我有一个很长的强类型表单 其输入与 viewmodel 作为 html 助手绑定 而我有一个非强类型的表 它是在用户单击 添加 按钮时生成的 并且我将其数据收集为 json 如何将json数据映射到viewmodel并作为一个单元发送到aj
  • 如何在不处于顶层的情况下解决 python 多处理的 pickling 错误?

    我已经多次研究过这个问题 但还没有找到适合我的情况或我理解的解决方法 所以请耐心等待 基本上 我有一个功能的分层组织 这阻止了我在顶层进行多重处理 不幸的是 我不相信我可以更改程序的布局 因为我需要在初始输入后创建的所有变量 例如 假设我有
  • 为什么 Flex 项目的宽度和高度会影响 Flex 项目的渲染方式?

    弹性盒中的图像具有max height样式看起来呈现不同 具体取决于它是否有其自身height and width属性集 The one with设置为图像的真实宽度 高度的属性 在保留其纵横比的情况下进行渲染 但没有属性的属性遵循max
  • 未设置 JavaScript Cookie

    我遵循了一些相关的主题 并且还遵循了教程http www quirksmode org js cookies html http www quirksmode org js cookies html但我无法设置我的cookie
  • Java 内部 LinkedList 是如何工作的?

    据我所知 链表的概念是一堆相互连接的对象 通过具有 下一个 有时是 上一个 属性来遍历对象 我注意到在 Java 中 您可以创建一个 LinkedList 对象 但通过使用相同的方法 如 add get 等 将其视为数组 列表 序列 那么
  • 如何检查列表理解中的对象是否不是 None?

    我对 Python 中的列表理解有些熟悉 但在我需要检查列表是否不是 None 的情况下 列表理解将会失败 e g tags v tags if tags for t in tags if t Key Name Do something 现
  • 在ContinueWith()块中使用await

    我有以下代码 var result MessageBoxHelper MsgBox ShowAsync Press Yes to proceed MessageBoxButton YesNo ContinueWith answer gt i
  • 在 VSCode 中调试 Angular 应用程序不再起作用

    我按照官方文档进行操作 https code visualstudio com docs nodejs angular tutorial debugging angular https code visualstudio com docs
  • [WPF]如何在画布上绘制网格?

    如何在继承自 Canvas 系统 ui 元素的自定义画布上绘制以下图表作为背景 感谢您提供任何有用的链接 你只需设置Canvas Background对某些人DrawingBrush 这个画笔只需要渲染一个矩形 通过使用一些Rectangl
  • Django 的双下划线

    在 Django 中 您可以进行如下数据库查询 Model objects filter name icontains bob 问题是 这在 幕后 是如何运作的 双下划线是 Django 的东西还是 Python 的东西 这只是一个名为na
  • 在 Laravel 5.5 中,当我们将作业调度到作业队列后,如何获取作业 ID?

    直到 Laravel 5 4 为止 dispatch 方法返回队列作业 ID job new JobClass gt onQueue queuename jobId dispatch job dd jobId prints the job
  • 将curl查询转换为请求

    我试图在以下位置使用文档 https pairbulkdata uspto gov api documentation https pairbulkdata uspto gov api documentation 但是 当我尝试这些查询时
  • 使用 Polymer 在同一 Web 组件的实例之间进行通信的最佳方式?

    我正在尝试在同一元素的实例之间同步一些 Web 组件属性 因此如果其中一个属性发生更改 则相同的属性将在具有相应绑定和事件的所有实例中更新 Note 我想使用聚合物数据系统概念 https www polymer project org 1
  • 在后台检查电池电量?

    当我们的应用程序处于后台时 是否可以快速检查电池电量 目前我正在开发一款 iOS 应用程序 当电池电量达到 30 时 用户会收到系统通知 我尝试了一下 收到的通知是随机的 有时是 4 有时是 10 比以往任何时候都高出 30 func ap
  • 构建过程中的病毒扫描

    我想将病毒扫描合并到 Java Maven Hudson 构建过程中 不幸的是 我找不到任何有关此类构建步骤的专用工具的资源 我的构建环境是基于Linux的 我的问题是 如何将防病毒扫描合并到基于 Maven 和 Hudson 的构建过程中
  • Python dict.get() 或 None 场景 [重复]

    这个问题在这里已经有答案了 我正在尝试根据我拥有的键列表访问字典的值 如果密钥不存在 我默认为 无 但是 当该值为空字符串 时 我遇到了麻烦 请参阅下面的代码以获取我的示例 dict dict key test dict get key p
  • 如何将我的浏览器上播放的实时视频流式传输到另一个用户的浏览器?

    我正在尝试使用 WebRTC 和 HTML 5 来实现这一目标 我对 WebRTC 很陌生 所以为了完成任务我尝试使用getUserMedia作为显示我的浏览器正在播放的视频的示例 作为一个实验 现在 播放视频和该视频的实时流位于同一个 h
  • Node.js 使用 xml2js 从生成的 XML 中删除根节点

    我正在尝试从 JSON obj 创建一个 XML 它在结果中给我根元素 我尝试设置显式根 var parser xml2js Parser explicitRoot false 为 false 但它不会删除默认根标记 而只是删除我的原始 X
  • 类路径中缺少符号“type .scalacheck.Shrink”

    我使用 Mockito 进行了以下 ScalaCheck 单元测试 import org scalatest mockito MockitoSugar import org mockito Mockito when import org s
  • 我们还需要子程序吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi