用g77编译Fortran时出现问题

时间:2013-10-17 03:36:16

标签: fortran fortran77 g77

我正在尝试使用g77编译我的工作中使用的一些旧Fortran代码。我是Fortran的新手并且一般编程,我正在努力解决所有错误。这是g77正在回归的那个:

afsirs.for: In subroutine `sw':
afsirs.for:1209: 
     DATA BLANK /'    '/
                 ^
Type disagreement between expressions at (?) and (^)

如果我理解正确,这与下面代码片段中使用的Hollerith常量有关:

1209  DATA BLANK /'    '/

...

2727  DIMENSION ARRAY(22,54),IAXIS(13),YAXIS(6),Y(52),X(52),YSC(12)
      CHARACTER CTYPE*12
      DATA EYE, BLANK, DASH, PLUS, SYMBOL/1HI,1H ,1H-,1H+,1H*/
      DATA YSC/1,2.5,5,10,20,40,50,60,75,100,150,200/
...

2753   C...... ZERO ARRAY
       DO 100 I = 1,22
       DO 100 J = 1,54
  100  ARRAY(I,J) = BLANK

我尝试过一些东西,用角色陈述取代霍勒瑞斯等,但我想我错过了一些东西。我将不胜感激任何关于如何进行的建议。

EDIT ---

 1209  DATA BLANK /'    '/

是名为“SW”的子程序的一部分,用于计算土壤水分可用性。然后在绘图子程序“plot”中初始化BLANK。

2 个答案:

答案 0 :(得分:1)

如果它有帮助,这个数据文件正在将每个眼睛,空白,短划线,加号​​和符号初始化为单个字符hollerith:

  DATA EYE, BLANK, DASH, PLUS, SYMBOL/1HI,1H ,1H-,1H+,1H*/

等效(并且IMO首选可读性),

  DATA EYE/1HI/, BLANK/1H /, DASH/1H-/, PLUS/1H+/, SYMBOL/1H*/

即使我还不够老,也不记得holleriths是否需要声明为整数,或者隐式输入是否有效。 (事实上​​,这可能是你的问题,如果他们没有被宣布为一个类型g77可能需要它们被声明为整数)

在任何情况下,这正是导致错误的原因,如果要将BLANK更改为字符,则需要将其从holerith数据语句中删除。 (除了符号之外的类型问题不能出现在同一程序单元中的两个DATA语句中)。真的,如果你想走这条路,你应该改变所有这些,在这种情况下,你会有类似的东西:

  character*1 EYE/'I'/, BLANK/' '/, DASH/'-'/, PLUS/'+'/, SYMBOL/'*'/

我不确定在代码中使用它们时需要什么(如果有的话)语法更改,但我猜你应该准备好改变整个代码中的每个hollerith,因为混合它们很可能要求麻烦。

至少你需要将ARRAY声明为字符: character * 1 array(22,54)

EDIT ---

测试了这个--- g77并不关心你是否/如何打字声明holleriths。实数,整数,双精度,字符或 implict 的工作方式相同。 较新的gfortran也适用于任何类型,但有关于类型转换的警告。 gfortran实际上更喜欢你将它们声明为正确长度的字符...(即你用char声明得到更少的警告)

这表明,作为第一遍,您可以将所有常量声明为字符,即

  character*1 EYE, BLANK, DASH, PLUS, SYMBOL
  DATA EYE, BLANK, DASH, PLUS, SYMBOL/1HI,1H ,1H-,1H+,1H*/

然后着手升级到现代字符语法。

答案 1 :(得分:0)

您初始化BLANK两次(在第1209行和第2727行之后),当然不允许这样做。