fortran - 避免数组索引的浮点数和整数之间的隐式转换
问题描述
当我在不应该使用实数的情况下使用实数时,我正在寻找一种方法来强制 Fortran 编译器给出错误消息。
例如,
Real :: i1,i2
Real :: A(1000,1000) , B(2000,2000)
A(i1:i2,:) =B(i1:i2,1:1000)
我有这样的代码,但我没有意识到我对 i1 和 i2 的声明。有时我会因此而遇到问题,直到我意识到这一点。显然,Fortran 进行了隐式转换,我宁愿被告知。
Fortran 编译器有没有办法看到该数组没有被预期的索引引用?
解决方案
Fortran 语言规范要求数组下标是(标量)整数表达式。此外,这是语言的一部分,需要有效的 Fortran 编译器才能检测和报告违反此约束的尝试。
默认情况下,一些编译器会选择将这种使用实际数组索引的情况报告为错误。其他人可能会接受它作为扩展并可能提供诊断警告。英特尔编译器(当前)默认默认接受它作为扩展。即使在没有进行诊断的情况下,也应该有一个启用此类报告的选项(以使编译器符合 Fortran 规范)。
在 ifort 的情况下,选项-stand
:
警告 #6187:Fortran 2008 在此上下文中需要 INTEGER 数据类型。
您甚至可以将其与-diag-error=6187
将诊断升级为错误相结合。
推荐阅读
- python - 使用 Google Cloud Functions 在两个 BigQuery 项目之间传输数据
- javascript - 错误:数据源必须是用于刷新的 URL | 控制台错误 | javascript | 海图
- c - 了解古代 C 中的动态分配
- sql - POSTGRESQL - Float8 数据类型可以容纳十进制(21,7)吗?
- windows - System.Speech 选项,Windows 10 Powershell 中未显示已安装的文本转语音语音
- python - 如何将整数列表打印到 QPlainTextEdit?
- c - 函数“系统”的隐式声明在 C99 中无效
- javascript - 如何使用 reduce 查找元素并构建数组对象?
- reactjs - 在 useEffect 中添加缺少的依赖项会导致递归循环
- mysql - 初始匹配后行中没有重复项