首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用g77编译Fortran时遇到的问题

用g77编译Fortran时遇到的问题
EN

Stack Overflow用户
提问于 2013-10-17 03:36:15
回答 2查看 608关注 0票数 3

我正在尝试编译我在g77工作中使用的一些旧的Fortran代码。我在Fortran和程序设计方面都是新手,我正在努力解决所有的错误。这是g77返回的一个:

代码语言:javascript
复制
afsirs.for: In subroutine `sw':
afsirs.for:1209: 
     DATA BLANK /'    '/
                 ^
Type disagreement between expressions at (?) and (^)

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

代码语言:javascript
复制
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,等等,但我想我遗漏了一些东西。我希望就如何进行工作提出任何建议。

编辑--

代码语言:javascript
复制
 1209  DATA BLANK /'    '/

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-17 12:48:48

如果有帮助,此数据订票将将眼睛、空白、破折号和符号初始化为单个字符hollerith:

代码语言:javascript
复制
  DATA EYE, BLANK, DASH, PLUS, SYMBOL/1HI,1H ,1H-,1H+,1H*/

相当于(海事组织更倾向于可读性),

代码语言:javascript
复制
  DATA EYE/1HI/, BLANK/1H /, DASH/1H-/, PLUS/1H+/, SYMBOL/1H*/

即使是im,也不足以记住hollerith是否需要被声明为整数,或者是否需要隐式类型。(实际上,如果根本没有声明类型,g77可能需要将它们声明为整数,这可能是您的问题)

在任何情况下,这都是导致错误的原因,如果要将空白更改为字符,则需要从全息数据语句中删除该字符。(除了键入问题外,符号不能出现在同一程序单元中的两个数据语句中)。实际上,如果你想沿着这条路走下去,你应该改变它们,在这种情况下,你会有如下的东西:

代码语言:javascript
复制
  character*1 EYE/'I'/, BLANK/' '/, DASH/'-'/, PLUS/'+'/, SYMBOL/'*'/

我不确定在代码中使用语法时需要更改什么(如果有的话),但我的猜测是,您应该准备开始更改整个代码中的每个hollerith,因为混合它们可能会带来麻烦。

至少您需要将数组声明为字符:字符*1数组(22,54)

编辑--

测试了这个- g77不在乎您是否/如何类型声明holleriths。实的,整数的,双精度的,字符或隐含的工作完全一样。较新的gfortran也适用于任何类型,但适用于有关类型转换的警告。实际上,gfortran更喜欢将它们声明为长度正确的字符..。(也就是说,使用char声明可以得到更少的警告)

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

代码语言:javascript
复制
  character*1 EYE, BLANK, DASH, PLUS, SYMBOL
  DATA EYE, BLANK, DASH, PLUS, SYMBOL/1HI,1H ,1H-,1H+,1H*/

然后开始升级到现代字符语法。

票数 1
EN

Stack Overflow用户

发布于 2013-10-18 12:53:13

您可以初始化两次空白(在第1209行和第2727行之后),这当然是不允许的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19417810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档