以下内容适用于 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作为编译器。 任何帮助将不胜感激。
英特尔 Fortran 12.1.5 不支持没有前导 MODULE 关键字的 procedure-stmt(错误引用的接口块内的语句)的形式或含义。
(因此,编译器将该行归类为 procedure-declaration-stmt - 因此出现两个错误。)
Fortran 2003 标准中引入了不带前导模块的过程语句的形式,Fortran 2008 标准中引入了将内部过程作为通用接口后面的特定过程的能力。
鉴于您所声明的不能使用模块过程的要求,在 Intel Fortran 支持该特定 Fortran 2008 功能之前,没有解决办法。