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

问题描述 投票:0回答:1

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

例如,

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

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

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

Fortran编译器无法看到未使用期望的索引引用该数组吗?

fortran intel-fortran
1个回答
1
投票

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

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

如果是ifort,则选项-stand

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

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

© www.soinside.com 2019 - 2024. All rights reserved.