对于派生类型,名称列表输入文件中的%符号不允许使用空格

时间:2016-11-17 02:11:34

标签: fortran

这是测试代码:

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编译器在两种情况下都能正常工作。

这种行为是否正常?也就是说,标准是否禁止名单列表输入文件中%周围的空格,而源代码中允许%周围的空格?

或者,这是编译器或标准库实现的错误吗?

1 个答案:

答案 0 :(得分:1)

最后,我找到了一些提到这个问题的参考文献。

来自http://technion.ac.il/doc/intel/compiler_f/main_for/lref_for/source_files/pghnminp.htm

  

& group-name object = value [,object = value] ... /

     

...

     

对象

     

是否在中定义了实体的名称(或子对象指示符)   NAMELIST声明组名。 对象名称不得   包含嵌入的空格,但在下标的括号内除外   或子字符串说明符。每个对象必须包含在一个对象中   记录。

来自http://docs.cray.com/books/S-3693-51/html-S-3693-51/i5lylchri.html的另一个,

  

2.13.1.1。名称 - 值对中的名称

     

...

     
      
  • 输入记录中的名称不得包含嵌入的空格。名称 - 值对中的名称可以在一个或多个之前或之后   空白。
  •   
显然,似乎永远不允许名字中的空格。