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

问题描述 投票:0回答:1

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

generics fortran intel-fortran fortran2003
1个回答
4
投票

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

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

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

鉴于您所声明的不能使用模块过程的要求,在 Intel Fortran 支持该特定 Fortran 2008 功能之前,没有解决办法。

© www.soinside.com 2019 - 2024. All rights reserved.