&引用;数据整型';字符串'/&引用;使用gfortran编译时出现问题

&引用;数据整型';字符串'/&引用;使用gfortran编译时出现问题,fortran,gfortran,g77,Fortran,Gfortran,G77,我有一些旧的(~1995)遗留fortran代码,它是用g77编译器编译的,在gfortran上失败了。 问题出现在以下行中(不兼容的类型转换、字符到整数): 变量CKYAN仅作为触发器使用一次: IF(IWVTX.EQ.CKYAN)THEN CALL FDCVERTEXSWITCHTOKYAN() ENDIF 从输入文件(字符串“KYAN”或其他字符串)读取整数IWVTX 我在fortran中没有任何重要的经验,也找不到任何关于从字符串初始化整型变量时发生了什么的文档。我已经和77国

我有一些旧的(~1995)遗留fortran代码,它是用g77编译器编译的,在gfortran上失败了。 问题出现在以下行中(不兼容的类型转换、字符到整数):

变量CKYAN仅作为触发器使用一次:

IF(IWVTX.EQ.CKYAN)THEN
    CALL FDCVERTEXSWITCHTOKYAN()
ENDIF
从输入文件(字符串“KYAN”或其他字符串)读取整数IWVTX

我在fortran中没有任何重要的经验,也找不到任何关于从字符串初始化整型变量时发生了什么的文档。我已经和77国集团的编译器核实过了。以下代码:

  INTEGER it,ita,it1,it2,it3,it4,it5,it6
  DATA it  / 'KYAN' /
  DATA ita / 'KYAN' /
  DATA it1 / 'K' /
  DATA it2 / 'Y' /
  DATA it3 / 'A' /
  DATA it4 / 'N' /
  DATA it5 / 'O' /
  DATA it6 / 'o' /
  write(*,*) 'test', it, ita, it1, it2, it3, it4, it5, it6
生成输出:

1312905547 1312905547 538976331 538976345 538976321 538976334 538976335 538976367
因此,如果字符串相等,则数字也相等。如果一个字母挨着另一个字母,其代码将递增1

问题如下:

  • 这是怎么回事
  • 是否有一个函数可以执行相同且可用的gfortran
  • 或者有没有一个简单的方法来解决这个问题,不接触任何其他文件

  • 有人能帮我吗?提前谢谢你。

    哇-这是1995年写的吗?Eep

    据我所知,这基本上是用整数编码字符常量(在有字符数据类型之前)。作为一个快速测试,将其中一个整数设置为4HKYAN似乎可以给出相同的答案

    这里这样做的原因似乎只是为了设置一个等于某个常数的标志,以便在以后进行测试。如果您想做同样的事情,现代的方法是
    ckyan=transfer('KYAN',ckyan)
    ,它采用字符串的位表示形式,将其转换为作为第二个参数传递的变量的格式,并返回它

    但在这里,只要IWVTX在不同情况下可以采用的值是不同的,那么命名常量的值似乎并不重要


    顺便说一句,你可能已经知道了这一点,但是Fortran Wiki有一个非常方便的页面;它并没有涵盖所有内容(比如这个,我以前没有见过这种形式),但它有助于将许多旧的、非标准的contstructs翻译成现代的Fortran。

    谢谢,前缀4H似乎做了正确的事情。这个链接也非常有用。
    1312905547 1312905547 538976331 538976345 538976321 538976334 538976335 538976367