2016-10-19 51 views
-2

以下是fortran 66代碼。試圖重新編譯很舊的程序。無法理解錯誤的原因。需要解決建議。儘量不要在更新的fortran中重新編碼。Hollerith數據語句

DATA NPOP/6HPOPS-I,6HPOPS-D,6HPOPS-C,6HPOPS-A,6HPOPS-E,6HPOP-S/
      ^
Truncating characters on right side of hollerith constant at (^) azthree.for:24: 
    DATA NPOP/6HPOPS-I,6HPOPS-D,6HPOPS-C,6HPOPS-A,6HPOPS-E,6HPOP-S/
         ^
Truncating characters on right side of hollerith constant at (^) azthree.for:24: 
    DATA NPOP/6HPOPS-I,6HPOPS-D,6HPOPS-C,6HPOPS-A,6HPOPS-E,6HPOP-S/
           ^
+1

顯示你更完整的代碼,完整的錯誤信息和具體申報編譯時使用的命令(包括編譯器版本)。請閱讀本網站的幫助頁面,瞭解如何提出一個好問題。 –

+0

我懷疑這是來自以整數方式存儲字符串的舊練習。更有趣的代碼看起來是特定於具有6字節整數的系統。我認爲除了顯然將'npop'的聲明修改爲'character * 6 npop(6)'或者等價的東西之外沒有任何工作。 (如果它讓你快樂,你可以獨自留下Holler的形式) – agentp

回答

0

我從來沒有使用過Fortran66,但是Hollerith常量聲明下一個字符是數據而不是代碼。因此6H意味着類似於:H之後的6個字符應該是數據,而不是代碼。我認爲6HPOPS-I"POPS-I"相同。

也許如果你能給我們NPOP的聲明,這將有助於理解這個問題。

我都有種重新使用此代碼的錯誤消息:

 PROGRAM holl 
     IMPLICIT NONE 
     CHARACTER*1 NPOP(6) 
     INTEGER i 
     DATA NPOP/6HPOPS-I,6HPOPS-D,6HPOPS-C, 
    +   6HPOPS-A,6HPOPS-E,6HPOP-S/
     DO 100 i = 1, 6 
     PRINT *, NPOP(i) 
100 CONTINUE 
     END PROGRAM 

這使編譯器警告:

$ gfortran -o holl holl.f 
holl.f:6.38: 

    +   6HPOPS-A,6HPOPS-E,6HPOP-S/
             1 
Warning: Legacy Extension: Hollerith constant at (1) 
holl.f:5.20: 

     DATA NPOP/6HPOPS-I,6HPOPS-D,6HPOPS-C, 
        1 
Warning: Initialization string starting at (1) was truncated to fit the variable (1/6) 
holl.f:5.29: 

     DATA NPOP/6HPOPS-I,6HPOPS-D,6HPOPS-C, 
          1 
Warning: Initialization string starting at (1) was truncated to fit the variable (1/6) 

但它不太你的錯誤。我不知道你使用哪種編譯器,在你的情況下,截斷標記似乎指向H本身。

所以我們真的需要您提供更多信息:

  1. 更多的代碼,的NPOP
  2. 編譯器版本和-options
+0

嗯,是的,但是那個錯誤意味着什麼呢? –

+0

這在我看來是一個完全不同的錯誤。它確實說明了他應該發佈的代碼量 – agentp

+0

對於相同的語法錯誤,不同的編譯器具有稍微不同的錯誤消息。事實上,當我嘗試使用英特爾Fortran編譯器時(即使用'-warn all'),它甚至沒有給我任何警告或錯誤。所以它可能仍然是這個錯誤,只是他的編譯器以一種稍微不同的方式抱怨它。 – chw21