3

以下适用于 gfortran 或 f95,但不适用于 ifort:

  interface add
     procedure addr, addi
  end interface add

  real a, b
  integer i, j

  data a, b, i, j /1.0, 2.0, 1, 2/


  call add(a,b)
  call add(i,j)

  stop
  contains 

  subroutine addr(x,y)
  real x, y
  print *, x+y
  return
  end subroutine addr

  subroutine addi(m, n)
  integer m, n
  print *, m+n
  return
  end subroutine addi

  end

ifort 返回此错误:

  error #6643: This statement is incorrectly positioned.
            procedure addr, addi
   ---------^
  error #8168: Parentheses are required after the PROCEDURE keyword.
            procedure addr, addi
  ---------^

假设不能使用任何模块过程(我们不希望模块中有 addr 和 addi)并且 ifort 必须用作编译器。任何帮助,将不胜感激。

4

1 回答 1

4

英特尔 Fortran 12.1.5 不支持没有前导 MODULE 关键字的procedure-stmt(错误所指的接口块内的语句)的形式或含义。

(因此,编译器将该行归类为procedure-declaration-stmt - 因此出现了两个错误。)

Fortran 2003 标准引入了不带前导模块的过程语句的形式,Fortran 2008 标准引入了将内部过程作为通用接口后面的特定过程的能力。

在英特尔 Fortran 支持特定的 Fortran 2008 功能之前,鉴于您声明的不能使用模块过程的要求,没有任何解决方法。

于 2012-07-31T03:49:14.637 回答