2015-08-31 53 views

回答

1

編譯器不會發出錯誤,因爲所有單獨的行都是有效的,並且錯誤只能在運行時檢測到。你可能會認爲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 
+0

你可以給一些示例字符串x,爲此,讀取x將把它作爲一個有效的格式字符串,因爲我不熟悉Fortran 2008。 – user5284834

+0

@ user5284834任何有效的格式都可以工作,'()'是2個字符之一。這些不是特定於Fortran 2008的,它們與大多數情況下是相同的,無論您使用的是哪種標準。 – casey

+0

謝謝。有效。 – user5284834

2

該代碼是錯誤的,但不是編譯器需要能夠檢測的方式。

read x本身並不是一個無效的讀取語句。這不是嘗試讀入變量x,而是讀取格式爲x的格式。 [這是一個沒有輸入列表的讀取語句。]因此,錯誤來自(未定義變量)x不是有效格式的事實。

在編譯時通常不可能檢測格式是否有效。如果您嘗試運行編譯的程序,您可能會發現運行時抱怨無效的格式。

+0

但不是格式字符串應該在括號內。所以什麼時候讀x一個有效的陳述。 – user5284834

+0

當x是一個有效的格式規範時,'read x'是有效的。是的,有效的部分是括號括起來。如果你做了'character(2):: x ='()';例如,閱讀x',那將是完全有效的。 [所有這些都將是一個記錄將從「標準輸入」讀取。] – francescalus