我正在尝试编译我在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我尝试过一些东西,用字符语句代替Hollerith,等等,但我想我遗漏了一些东西。我希望就如何进行工作提出任何建议。
编辑--
1209 DATA BLANK /' '/是名为“SW”的子例程的一部分,该子程序计算土壤水分可用度。然后在绘图子例程“绘图”中初始化空白。
发布于 2013-10-17 12:48:48
如果有帮助,此数据订票将将眼睛、空白、破折号和符号初始化为单个字符hollerith:
DATA EYE, BLANK, DASH, PLUS, SYMBOL/1HI,1H ,1H-,1H+,1H*/相当于(海事组织更倾向于可读性),
DATA EYE/1HI/, BLANK/1H /, DASH/1H-/, PLUS/1H+/, SYMBOL/1H*/即使是im,也不足以记住hollerith是否需要被声明为整数,或者是否需要隐式类型。(实际上,如果根本没有声明类型,g77可能需要将它们声明为整数,这可能是您的问题)
在任何情况下,这都是导致错误的原因,如果要将空白更改为字符,则需要从全息数据语句中删除该字符。(除了键入问题外,符号不能出现在同一程序单元中的两个数据语句中)。实际上,如果你想沿着这条路走下去,你应该改变它们,在这种情况下,你会有如下的东西:
character*1 EYE/'I'/, BLANK/' '/, DASH/'-'/, PLUS/'+'/, SYMBOL/'*'/我不确定在代码中使用语法时需要更改什么(如果有的话),但我的猜测是,您应该准备开始更改整个代码中的每个hollerith,因为混合它们可能会带来麻烦。
至少您需要将数组声明为字符:字符*1数组(22,54)
编辑--
测试了这个- g77不在乎您是否/如何类型声明holleriths。实的,整数的,双精度的,字符或隐含的工作完全一样。较新的gfortran也适用于任何类型,但适用于有关类型转换的警告。实际上,gfortran更喜欢将它们声明为长度正确的字符..。(也就是说,使用char声明可以得到更少的警告)
这表明,作为第一次传递,您可以将所有常量声明为字符,即。
character*1 EYE, BLANK, DASH, PLUS, SYMBOL
DATA EYE, BLANK, DASH, PLUS, SYMBOL/1HI,1H ,1H-,1H+,1H*/然后开始升级到现代字符语法。
发布于 2013-10-18 12:53:13
您可以初始化两次空白(在第1209行和第2727行之后),这当然是不允许的。
https://stackoverflow.com/questions/19417810
复制相似问题