fortran伪参数不';与实际论点不符。有铸件吗?

fortran伪参数不';与实际论点不符。有铸件吗?,fortran,intel-fortran,Fortran,Intel Fortran,我最近继承了Fortran代码,该代码以前是使用较旧版本的“英特尔Visual Fortran编译器”构建的。有一段代码过去用于编译,但现在抛出一个错误#6633“实际参数的类型与伪参数的类型不同。” 问题是当使用REAL*4DATA\u数组(*)调用名为READ\u AND\u CONVERT的函数时,但在READ\u AND\u CONVERT中,该参数声明为INT*2。我认为它只需要数据数组的地址 是否有一种方法可以传递数据\u数组的地址,即使它们是不同类型的 下面是读取和转换:

我最近继承了Fortran代码,该代码以前是使用较旧版本的“英特尔Visual Fortran编译器”构建的。有一段代码过去用于编译,但现在抛出一个错误#6633“实际参数的类型与伪参数的类型不同。”

问题是当使用
REAL*4
DATA\u数组(*)
调用名为
READ\u AND\u CONVERT
的函数时,但在
READ\u AND\u CONVERT
中,该参数声明为
INT*2
。我认为它只需要
数据数组的地址

是否有一种方法可以传递
数据\u数组的地址,即使它们是不同类型的

下面是
读取和转换

      SUBROUTINE READ_AND_CONVERT (MX, N)
C=======================================================================
C     Reads Integer*2 Data Array and Converts it to Real*4.
C
C     This is a service routine called by subroutines
C     READ_XYZ_2, READ_XYZ_4, READ_XYZ_ALL and READ_XYZ_FULL
C=======================================================================
C
      IMPLICIT  NONE
C
      INCLUDE   'XYZ.FOR'
      INCLUDE   'COMMON_XYZIO.FOR'
      INCLUDE   'COMMON_HDR.FOR'
C
C-----------------------------------------------------------------------
C     Local Parameters
C-----------------------------------------------------------------------
C
      LOGICAL    BB_FOUND
      INTEGER*2  MX, MY
      INTEGER*4  N, J
      REAL*4     YJ, BB
C
      DIMENSION MX(*), MY(2)
      EQUIVALENCE (YJ, MY(1))
C
C-----------------------------------------------------------------------
C
      CALL GET_REAL_PARAMETER ('XYZ$_OFFSET', BB, BB_FOUND)
C
      READ (LUGIN) (MX(J), J = 1,N)
C
      IF (BB_FOUND) THEN
         DO J = N, 1, -1
            YJ        = (SCALE_FACTOR * MX(J)) + BB
            MX(2*J)   = MY(2)
            MX(2*J-1) = MY(1)
         END DO
      ELSE
         DO J = N, 1, -1
            YJ        = SCALE_FACTOR * MX(J)
            MX(2*J)   = MY(2)
            MX(2*J-1) = MY(1)
         END DO
      END IF
C
      RETURN
      END
找到了一个解决方案: 基本上禁用警告。。。通过设置属性| Fortran | Diagnostics |检查例程接口[从是更改为否]

本文还展示了如何将复杂数组转换为真实数组的示例:

use ISO_C_BINDING

complex(8), allocatable :: c(:)
real(8), pointer:: p(:)

allocate(c(N))
call C_F_POINTER(C_LOC(c), p, [2*N])
call donothing(N, p)

“英特尔Fortran”中有一些指令禁用给定例程和给定参数的参数类型检查。禁用对所有代码的检查是危险的

!DEC$ ATTRIBUTES NO_ARG_CHECK :: ARGUMENT_NAME

来源:

你真的需要给你的问题贴上更好的标签,以获得更多的关注。即使在订阅[fortran*]时,我也没有看到它。只有41名追随者和1500名追随者。