以下适用于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必须用作编译器。 任何帮助将不胜感激。
答案 0 :(得分:4)
英特尔Fortran 12.1.5不支持 procedure-stmt (错误引用的接口块内的语句)的形式或含义,而不支持前导MODULE关键字。
(因此编译器已将该行分类为 procedure-declaration-stmt - 因此存在两个错误。)
Fortran 2003标准中引入了没有领先模块的过程语句的形式,在Fortran 2008标准中引入了将内部过程作为通用接口背后的特定过程的能力。
在英特尔Fortran支持特定的Fortran 2008功能之前,由于您声明无法使用模块程序,因此没有解决方法。