Fortran 中的断言

2024-02-21

Fortran 是否有与 C 等效的标准函数/关键字assert?

我找不到assert我在 Fortran 2003 标准中提到过。我发现了几种使用预处理器的方法,但是在这个answer https://stackoverflow.com/a/2759656/2838364建议自己写断言。是否可以在不使用预处理器的情况下创建这样的用户函数/子例程?

我希望这些断言在发布版本中被禁用。


条件编译在 Fortran 中从未真正流行起来,并且没有标准的预处理器。如果让你的预处理器切换进出虚拟断言例程不是你想要解决的问题,你可以......

定义一个全局参数,例如:

logical, parameter :: debugging = .true.

如果您性格紧张,您可以将其放入一个模块中,并将其使用关联到需要它的每个范围中;在我看来,使用全局参数似乎是一种合理的方法。

然后编写受保护的测试,例如

if (debugging) call assert(...)

一旦你想释放代码,设置值debugging to .false.我希望,尽管我还没有对此进行测试,所以您可能会关心,任何当前的 Fortran 编译器在遇到相当于以下的表达式时都可以删除死代码

if (.false.) call assert(...)

并且您发布的代码不会因对某个对象的虚拟调用而受到惩罚assert常规。

另一种方法可能是创建一个模块,我们称之为assertions,沿着这些思路:

module assertions

contains

  subroutine assert_prd(args)
    ! declare args
  end subroutine

  subroutine assert_dbg(args)
    ! declare args
    ! now do do some assertion checking and exception raising, etc
  end subroutine

end module assertions

然后,您可以在使用关联子例程时重命名它们,例如:

use, non_intrinsic :: assertions, assert=>assert_dbg

并将其更改为assert=>assert_prd当你想关闭断言检查时。我怀疑编译器可能不会完全消除对空子例程的调用,并且您的生产代码可能会为其遇到的每个断言付出小小的代价。

除此之外,请参阅 @AlexanderVogt 向您推荐的 Arjen Markus 的论文。

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

Fortran 中的断言 的相关文章

  • Fortran 90 - 尝试读取文件末尾之后的内容

    我在 Fortran 90 中遇到读取问题 我尝试读取 31488 行数据 我正在使用 Portland Group Fortran 90 编译器 我的错误信息是这样的 PGFIO F 217 列表定向读取 单元 14 尝试读取文件末尾 文
  • 继续断言测试用例

    上次我使用 testcafe 时 我意识到这个伟大框架中缺少我的功能 该功能类似于 尽管出现了断言 但仍继续执行特定测试的其余部分 更准确地说 我描述了我缺少此类功能的原因 假设您正在测试 Web 应用程序 例如要在其中输入合同日期的 We
  • 在 Fortran 语言中 advance='no' 是什么意思?

    我是 Fortran 新手 我不明白这一行 write a35 advance no in program democonvertion implicit none real tc tf tr tk write a35 advance no
  • 使用 Iso_Fortran_Env 设置函数的 Kind 值

    如何使用 ISO Fortran Env 的内在函数以 Fortran 2008 惯用的方式设置函数的返回 KIND 值 通常在主程序中 我可以使用 ISO Fortran 内在函数 如下所示 program name here use i
  • 为什么我必须在 Fortran 中隐式指定函数的双精度返回值?

    我是 Fortran 新手 我正在尝试common堵塞 我的代码很简单 program main implicit double precision p real 8 x y common yvalue y x 3d0 y 3d0 prin
  • Flutter 在编译发布时是否会删除调试模式代码?

    我想知道将密码直接放在 Dart 代码中是否安全 如下所示 Flutter在编译发布时会删除代码吗 当然 我想确保代码无法被反编译 以便可以提取用户名和密码 bool get isInDebugMode bool inDebugMode f
  • SELECT TYPE 构造中的多态性分配

    我试图定义一个分配不同类型数组的子例程 这是代码的简化版本 subroutine Allocation1 Vec class allocatable intent out Vec select type Vec type is real 8
  • 将派生类型中的指针分配给 Fortran 中相同类型中的目标

    我想在包含在同一派生类型中的派生类型中分配一个指针 下面的代码给了我下面的错误 这是怎么回事 我该如何解决这个问题 24 zoos i tigers 1 gt zoos i animals 1 1 1 Error Expected boun
  • 在 Fortran 90 中,是否必须事先声明数组维度?

    是否有必要在任何其他代码之前声明数组维度 例如 我编写了以下简化的示例代码 PROGRAM mytest IMPLICIT NONE INTEGER i j k mysum Let array c be a k by k 2 array D
  • 忽略 doxygen 注释块中的行

    是否可以在 doxygen 注释块中包含将被 doxygen 忽略的内容 换句话说 我们可以在 doxygen 评论块中发表评论吗 背景 我们正在将 Fortran 项目的代码内注释转换为 doxygen 可解析的格式 但是该项目要求代码内
  • 不确定 openmp 循环中应该共享或私有什么

    我有一个更新矩阵 A 的循环 我想将其设为 openmp 但我不确定哪些变量应该共享和私有 我本以为只有 ii 和 jj 就可以工作 但事实并非如此 我想我也需要在某个地方进行 OMP ATOMIC UPDATE 该循环仅计算 N 和 N
  • 在 Fortran 中确定循环后循环控制变量的值

    我有以下程序 program example implicit none integer i x1 real x 10 0 do i 10 1 2 x 10 i 2 i 1 enddo x1 i 2 1 end program exampl
  • 使用 Fortran (CLFORTRAN) 在 OpenCL 中将两个选项作为参数传递

    当我的主机程序采用 C 语言时 我可以传递两个选项作为 OpenCL 函数的参数 例如 我可以通过两个 标志到clCreateBuffer像这样的函数 clCreateBuffer context CL MEM READ ONLY CL M
  • Dependency Walker 未显示所有依赖的 Dll

    我有一个 fortran dll 我想知道它所依赖的程序集再分配目的 http software intel com en us forums showthread php t 73161 我发现的一件事是依赖项步行器没有显示所有依赖项 即
  • 如何用好Fortran语句标签?

    我正在开发一个用 Fortran 95 编写的模型 我对此完全陌生 语句标签的概念似乎很奇怪 到目前为止我只找到了标签可以由作者任意决定的解释 通常以 10 为增量 除了更容易地找出语句的结尾位置之外 这些标签还有其他实际用途吗 以及关于如
  • 编译器处理包含保护头的开销有多大?

    为了加速大型源文件的编译 修剪翻译单元中使用的标头数量是否更有意义 或者编译代码的成本是否远远超过处理包含保护的时间标头 如果后者是真的 那么工程工作最好花在创建更多 轻量级的标头上 而不是更少 那么 现代编译器需要多长时间才能处理有效包含
  • gfortran 未定义的引用

    我正在尝试编译一个依赖很多东西的程序 我使用并修改了提供的 makefile 来代表我的计算机设置 但在编译的最后一步中我不断收到许多未定义的引用 导致问题的命令行是 gfortran o cosmomc ParamNames o Matr
  • 支持非致命故障的 Python 测试框架

    我正在评估自动化系统测试的 测试框架 到目前为止我正在寻找一个Python框架 在 py test 或鼻子中 我看不到类似我从谷歌测试框架中知道的 EXPECT 宏的东西 我想在一个测试中做出多个断言 同时不在第一次失败时中止测试 我在这些
  • 如何调用模块中子程序内部的函数?

    我有一个包含子例程的模块 该子例程又包含一个函数 我说use themodule在我的主程序中 我可以call thesubroutine 但是如何访问子例程中包含的函数呢 代码如下所示 module useful integer para
  • 纯 Fortran 过程中的 I/O

    我正在尝试将错误检查合并到我正在编写的纯过程中 我想要这样的东西 pure real function func1 output unit a implicit none integer a output unit if a lt 0 th

随机推荐

  • 在 iOS 8 Beacon 中未检测到

    iBeacon 在 iOS8 中突然停止工作 之前它在之前的 iOS 8 版本中运行良好 有人帮助我摆脱这个问题吗 请问是什么问题 谢谢 您需要做的是在代码中添加访问位置服务的请求权限 如下所示 if self locationManage
  • 如何在CXF中使用PATCH方法

    我正在尝试使用 JAX RS 的 CXF 实现在我的客户端中使用 PATCH 方法 起初我将 PATCH 注释定义为 Target ElementType METHOD Retention RetentionPolicy RUNTIME H
  • C 与 C++ 中的 typedef 和 struct 命名空间

    我正在尝试在一些新的 C 中使用一些旧的 C 库 该库的头文件使用 D Hanson 的 C 接口和实现 https rads stackoverflow com amzn click com 0201498413隐藏实现的习惯用法 def
  • 将元素替换为outerHTML并立即访问新创建的元素

    我通过将 DOM 元素的内容替换为outerHTML 这个技巧有效 但我需要立即访问新创建的 DOM 元素 不幸的是元素的创建
  • 有没有办法只获取未命名的参数?

    在 JavaScript 函数中 arguments https developer mozilla org en US docs Web JavaScript Reference Functions and function scope
  • 为 ggplot2 中的两个构面组指定不同的 x-tick 标签

    我有代表两种方法结果的箱线图 每种方法都有两种验证方法和三种场景 使用 ggplot2 进行绘制 一切正常 但我想更改 x 轴刻度标签以区分每组中使用的技术类型 我使用了以下代码 data lt read csv results csv h
  • Laravel 和 Eloquent:检索相关项目时指定列

    这是以下帖子的后续帖子 Laravel 4 和 Eloquent 检索所有记录和所有相关记录 https stackoverflow com questions 21735011 laravel 4 and eloquent retriev
  • 从 iOS 服务检测屏幕开/关

    我正在开发一个作为服务在后台运行的网络监控应用程序 当屏幕打开或关闭时是否可以收到通知 来电 它通过使用以下代码存在于Android中 private void registerScreenOnOffReceiver IntentFilte
  • 使用nodejs进行heroku部署失败

    我正在尝试将本地文件推送到 heroku 并遇到以下错误 我的代码在github https github com asimkh apps tree haz 有人可以帮我吗 谢谢 heroku buildpacks set heroku n
  • 如何检测 STAMINA 模式?

    您能帮助我 如何以编程方式检测索尼设备上的 STAMINA 模式吗 我想通知用户 如果 STAMINA 打开 我的应用程序将无法正常工作 因为它阻止了 AlarmManager 并且设备在我需要时不会被唤醒 我也想知道这个 我想一个天真的方
  • Flask WTform 对多个字段进行验证

    根据两个或多个条目验证 WTform 的最佳方法是什么 IE 在下面的表格中 我想验证数据库中尚不存在具有所提供名称和地址的公司 class CompanyForm FlaskForm name StringField Company Na
  • 如何在bash中生成笛卡尔积?

    我想生成这样的文件 笛卡尔积 1 3 X 1 5 1 1 1 2 1 3 1 4 1 5 2 1 2 2 2 3 2 4 2 5 3 1 3 2 3 3 3 4 3 5 我可以使用嵌套循环来做到这一点 例如 for i in seq 3 d
  • 无法执行dex:Java堆空间 Java堆空间

    在 Eclipse IDE 中执行 Web 驱动程序脚本时 出现 Unable toexecute dex Java heap space Java heap space 错误 我已经使用 Android SDK 和 AVD Manager
  • Java 流压缩两个列表

    我有一个人员哈希集 一个人有名字 姓氏和年龄 例如 Person Hans Man 36 我的任务是获取 17 岁以上人员的列表 按年龄对他们进行排序 并将名字与姓氏连接起来 比如 汉斯 曼 另一个名字 另一个名字 我刚刚被允许导入 imp
  • 禁用 Reactjs 中的依赖下拉选项

    我正在制作一个简单的反应应用程序 其中有一些下拉列表 其中一个依赖于另一个 gt 这里下拉菜单 1 的值为游戏类型 例如Indoor and Outdoor gt 这里下拉菜单 2 的值为运动类型 例如Chess Tennis and Fo
  • “perf stat”输出是什么意思?

    I use perf stat 命令对一些事件进行统计 root root test perf stat a e r81d0 r82d0 v a r81d0 71800964 1269047979 1269006431 r82d0 2665
  • Graphics.Drawstring 在 PictureBox 中看起来不错,但在 Bitmap 中却很糟糕

    我正在尝试使用DrawString将文本写为图像 然后将其旋转 90 度 它无论是在位图上还是直接在 PictureBox 上都可以正常工作 但最大的区别在于质量 这PictureBox绘制的文本质量很好而且看起来很漂亮 当我把它画在图像上
  • 使用 jimp 在 Node.js 中调整图像大小并获取新图像的路径

    我正在使用 jimp 调整 node js 中的图像大小 我成功地降低了图像质量 但有点困惑如何获取新图像的路径 Jimp read test jpg function err test if err throw err test resi
  • 事件循环和Promise之间有什么关系[重复]

    这个问题在这里已经有答案了 我很好奇Event Loop和Promise之间的关系 演示暴露了这个问题 我预计p1 fulfilled出现在中间 因为它们将任务排队到同一个任务队列中并逐个执行 var p1 new Promise func
  • Fortran 中的断言

    Fortran 是否有与 C 等效的标准函数 关键字assert 我找不到assert我在 Fortran 2003 标准中提到过 我发现了几种使用预处理器的方法 但是在这个answer https stackoverflow com a