避免在数组索引的float和integer之间进行隐式转换

时间:2019-11-04 20:05:37

标签: fortran intel-fortran

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

例如,

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

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

我有这样的代码,但我没有实现i1和i2的声明。 有时我常常因此而遇到问题,直到意识到。显然,Fortran进行了隐式转换,我希望知道这一点。

Fortran编译器是否无法看到未使用预期索引引用该数组?

1 个答案:

答案 0 :(得分:1)

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

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

对于ifort而言,选项-stand

  

警告#6187:在这种情况下,Fortran 2008需要一个INTEGER数据类型。

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