爲什麼gfortran在此處沒有顯示讀取語句的任何編譯錯誤?Fortran讀取語句不提供編譯錯誤
program test
character(len=2) :: x
read x
end program
爲什麼gfortran在此處沒有顯示讀取語句的任何編譯錯誤?Fortran讀取語句不提供編譯錯誤
program test
character(len=2) :: x
read x
end program
編譯器不會發出錯誤,因爲所有單獨的行都是有效的,並且錯誤只能在運行時檢測到。你可能會認爲read
將從某處讀取數據並將其存儲在x
中,但這不是發生的情況。聲明
read x
與Fortran 2008標準(cl 9.6.1)中的R910匹配。具體而言,讀語句的一種可能性是:
READ format [, input-item-list]
將匹配read x
,解釋x
作爲格式。您可以通過運行您的程序來確認此問題,該程序會產生運行時錯誤:
At line 3 of file read.f90 (unit = 5, file = 'stdin')
Fortran runtime error: Missing initial left parenthesis in format
該代碼是錯誤的,但不是編譯器需要能夠檢測的方式。
read x
本身並不是一個無效的讀取語句。這不是嘗試讀入變量x
,而是讀取格式爲x
的格式。 [這是一個沒有輸入列表的讀取語句。]因此,錯誤來自(未定義變量)x
不是有效格式的事實。
在編譯時通常不可能檢測格式是否有效。如果您嘗試運行編譯的程序,您可能會發現運行時抱怨無效的格式。
但不是格式字符串應該在括號內。所以什麼時候讀x一個有效的陳述。 – user5284834
當x是一個有效的格式規範時,'read x'是有效的。是的,有效的部分是括號括起來。如果你做了'character(2):: x ='()';例如,閱讀x',那將是完全有效的。 [所有這些都將是一個記錄將從「標準輸入」讀取。] – francescalus
你可以給一些示例字符串x,爲此,讀取x將把它作爲一個有效的格式字符串,因爲我不熟悉Fortran 2008。 – user5284834
@ user5284834任何有效的格式都可以工作,'()'是2個字符之一。這些不是特定於Fortran 2008的,它們與大多數情況下是相同的,無論您使用的是哪種標準。 – casey
謝謝。有效。 – user5284834