使用ifort编译器具有通用内部过程

时间:2012-07-31 02:00:05

标签: generics compiler-construction fortran intel-fortran fortran2003

以下适用于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必须用作编译器。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

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

(因此编译器已将该行分类为 procedure-declaration-stmt - 因此存在两个错误。)

Fortran 2003标准中引入了没有领先模块的过程语句的形式,在Fortran 2008标准中引入了将内部过程作为通用接口背后的特定过程的能力。

在英特尔Fortran支持特定的Fortran 2008功能之前,由于您声明无法使用模块程序,因此没有解决方法。