为什么gfortran在这里没有显示任何编译错误?
program test
character(len=2) :: x
read x
end program
答案 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