避免数组索引的浮点数和整数之间的隐式转换

Avoid implicit conversion between float and integer for an array index

我正在寻找一种方法,当我在不应该使用实数的情况下使用实数时,强制 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:

warning #6187: Fortran 2008 requires an INTEGER data type in this context.

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