gfortran类型绑定循环变量触发无法识别语句错误原因咨询
错误原因
- Fortran 2003及更早的语言标准明确要求,
do循环的控制变量只能是普通的标量变量,不支持派生类型的成员(也就是你代码里my_a%i这种带%的组件引用形式)作为循环控制变量,这是触发报错的核心原因。 - 你当前使用的gfortran默认遵循旧版Fortran标准编译,而派生类型成员作为do循环控制变量的语法是Fortran 2008版本才新增的特性,默认编译规则不识别该写法。
解决方法
有两种可选方案:
方案1:调整代码适配所有标准版本
新增临时普通变量作为循环控制变量,循环内同步给派生类型成员赋值,兼容所有Fortran版本,代码修改示例如下:
program main use mymod, only : a implicit none type(a) :: my_a ! 新增临时普通变量作为循环控制变量 integer :: loop_i do loop_i = 1, 5 my_a%i = loop_i print *, "hello" enddo end program main
方案2:开启高版本标准编译支持
如果你的gfortran版本在4.6及以上,可在编译时添加-std=f2008参数启用Fortran 2008标准支持,无需修改代码即可编译通过,编译命令示例:
gfortran -std=f2008 mymod.f90 main.f90 -o test
内容的提问来源于stack exchange,提问作者ryfi808
相关产品推荐
相关产品推荐

