首页 > 解决方案 > 避免数组索引的浮点数和整数之间的隐式转换

问题描述

当我在不应该使用实数的情况下使用实数时,我正在寻找一种方法来强制 Fortran 编译器给出错误消息。

例如,

Real :: i1,i2
Real :: A(1000,1000) , B(2000,2000)

A(i1:i2,:) =B(i1:i2,1:1000)

我有这样的代码,但我没有意识到我对 i1 和 i2 的声明。有时我会因此而遇到问题,直到我意识到这一点。显然,Fortran 进行了隐式转换,我宁愿被告知。

Fortran 编译器有没有办法看到该数组没有被预期的索引引用?

标签: fortranintel-fortran

解决方案


Fortran 语言规范要求数组下标是(标量)整数表达式。此外,这是语言的一部分,需要有效的 Fortran 编译器才能检测和报告违反此约束的尝试。

默认情况下,一些编译器会选择将这种使用实际数组索引的情况报告为错误。其他人可能会接受它作为扩展并可能提供诊断警告。英特尔编译器(当前)默认默认接受它作为扩展。即使在没有进行诊断的情况下,也应该有一个启用此类报告的选项(以使编译器符合 Fortran 规范)。

在 ifort 的情况下,选项-stand

警告 #6187:Fortran 2008 在此上下文中需要 INTEGER 数据类型。

您甚至可以将其与-diag-error=6187将诊断升级为错误相结合。


推荐阅读