gpt4 book ai didi

fortran - 使用 g77 编译 Fortran 时遇到问题

转载 作者:行者123 更新时间:2023-12-02 03:42:09 25 4
gpt4 key购买 nike

我正在尝试使用 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

我已经尝试了一些方法,用 Character 语句替换了 Holleriths 等,但我认为我遗漏了一些东西。对于如何进行的任何建议,我将不胜感激。

编辑---

 1209  DATA BLANK /'    '/

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

最佳答案

如果有帮助,这个数据状态正在将每个眼睛、空白、破折号、加号和符号初始化为单个字符 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 声明为字符:字符*1数组(22,54)

编辑---

对此进行了测试 --- g77 不关心您是否/如何键入声明 holleriths。实数、整数、 double 、字符或隐式 的工作方式相同。较新的 gfortran 也适用于任何类型,但带有关于类型转换的警告。gfortran 实际上更喜欢您将它们声明为正确长度的字符...(也就是说,使用 char 声明您会收到更少的警告)

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

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

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

关于fortran - 使用 g77 编译 Fortran 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19417810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com