Fortran读取语句不会出现编译错误

时间:2015-08-31 13:27:50

标签: fortran

为什么gfortran在这里没有显示任何编译错误?

program test
    character(len=2) :: x
    read x
end program

2 个答案:

答案 0 :(得分:2)

代码是错误的,但不是要求编译器能够检测到。

read x本身并不是一个无效的读取语句。这不是尝试读取变量x,而是使用x给出的格式读取。 [它是没有输入列表的读取语句。]因此,错误来自(未定义变量)x不是有效格式的事实。

当格​​式来自变量时检测格式是否有效通常在编译时是不可能的。如果您尝试运行编译的程序,您可能会发现运行时抱怨格式无效。

答案 1 :(得分:1)

编译器不会发出错误,因为所有单独的行都是有效的,并且只能在运行时检测到错误。您可能认为read将从某处读取数据并将其存储在x中,但这不是正在发生的事情。声明

read x

符合Fortran 2008标准(cl 9.6.1)中的R910。具体来说, read-stmt 的一种可能性是:

  

阅读格式 [,输入项目列表]

将匹配read x,将x解释为格式。您可以通过运行程序来确认这一点,这会产生运行时错误:

At line 3 of file read.f90 (unit = 5, file = 'stdin')
Fortran runtime error: Missing initial left parenthesis in format