2011-03-09 83 views
1

根據Fortran標準信息,我可以找到(F77,F90/95)數組聲明符,其中沒有下限假定此下限爲1。上限需要大於或等於下限,這會使得不允許以下語句:Fortran中的數組聲明符,沒有下限和上限0

INTEGER A(0) 

但是,我不能讓ifort,也不以任何方式有關聲明gfortran抱怨。編譯器不需要將其標記爲錯誤?

回答

5

由於上限需要大於或等於下限,因此不允許使用以下語句。

從Fortran的2008標準:

5.3.8.2顯式形狀的數組
[...] 3各自下限和上限的值確定的範圍該陣列沿着特定維度,因此也是該維度中陣列的範圍。如果出現下界,則它會出現下界;否則下限爲1.下限或上限的值可以是正數,負數或零。該維度中數組的下標範圍是包含下限和上限之間的整數值集合,前提是上限不小於下限。 如果上限小於下限,則範圍爲空,該維度中的範圍爲零,且該數組的大小爲零。

+0

thnx!但是,我沒有在F77和F90/95規範中找到特定的最後一句話,我擡頭......呃,我會接受這個答案,假設它並不太重要,並且顯然在後來的標準中這是允許的。 – steabert 2011-03-09 21:18:54

+0

它在F90和F95中。只有F77明確禁止上限小於下限。 – eriktous 2011-03-09 23:11:26

+0

Thnx,然後我的資料來源,畢竟只提及F77。但是,帶有-std = legacy的gfortran不會投訴。 – steabert 2011-03-10 16:51:27

1

這已經有一段時間,因爲我編碼FORTRAN,但我似乎記得,如果只有一個號碼被提供時,它給該數組的長度(與下限和上限隱含成爲1和length)。所以你的代碼創建一個零長度的數組。

+0

是的,這的確會意味着我的發言等同於'整數(1:0)',但我的問題是,編譯器不會介意。即使'INTEGER A(10:0)'也被接受。唯一的問題是,當你嘗試訪問這樣一個數組時,它總會給出一個超出界限的錯誤。 – steabert 2011-03-09 19:28:58

+0

@steabert:我認爲你指出,因爲等價性成立。但是你可以嘗試將'INTEGER A(lower,upper)'看作「A'是一個沒有低於'lower'的數組是合法的數組,並且沒有高於'upper'的索引是合法的。如果'lower> upper',那麼沒有索引是合法的,就像你說的那樣。但是,有零長度的數組是完全有效的理由。考慮例如一個將整數數組作爲參數的函數,並且應該返回滿足特定標準的所有整數。如果沒有找到這樣的整數,則返回一個零長度的數組是很自然的事情。 – 2011-03-09 19:34:06

+0

如果只給出一個數字,我認爲它不應該被認爲是指定長度。這個數字也可能是負數。 – eriktous 2011-03-09 23:17:16