【发布时间】:2016-11-17 02:11:33
【问题描述】:
这里是测试代码:
program testcase
implicit none
integer :: ios, lu
type derived
integer :: a
end type derived
type (derived) :: d
namelist /test/ d
lu = 3
open (lu, file = 'test.dat', status='old', iostat=ios)
read (lu, nml = test, iostat=ios)
if (ios /= 0) then
write (*, *) 'error!'
else
write (*, *) 'good!', d % a
endif
end program testcase
此程序读取输入文件 test.dat,其中包含 test 的名称列表,其类型是派生类型 derived。
当我尝试 test.dat 的下一个内容时,它工作正常(它打印 good! 7):
&test
d%a = 7
/
但是,对于下一个内容,我收到一个错误:
&test
d % a = 7
/
Equal sign must follow namelist object name d
不同之处在于% 符号周围的空格用于派生类型中的组件访问。
我已经使用 GNU Fortran(gfortran) 5.3.0 进行了测试。我还从同事那里听说,最新的英特尔 Fortran 编译器也出现了同样的问题。他还坚持认为旧版本的英特尔 Fortran 编译器在这两种情况下都能正常工作。
这种行为正常吗?也就是说,标准是否禁止namelist输入文件中%周围的空格,而源代码中允许%周围的空格?
或者,这是编译器的错误还是标准库的实现?
【问题讨论】:
-
如果
%字符周围有空格,我可以确认gfortranv4.4.7 会出错,而intel fortran 编译器(v12.1.3 和v16.0.3)可以正确读取名称列表。 -
我发现了错误信息,它是代码 5010,信息是“等号必须遵循 namelist object name d”
-
@chw21 谢谢。您的信息帮助我找到了一些说明这种情况的页面。
标签: fortran