如何在Fortran中为单个函数抑制未使用的伪参数警告?

时间:2011-03-21 17:22:01

标签: fortran compiler-warnings

我有以下FORTRAN代码:

FUNCTION inverse_deterministic_cdf(dist, p) RESULT(value)
    !=========== result ============
    REAL(C_DOUBLE) :: value

    !====== input parameters =======
    TYPE(deterministic), INTENT(IN) :: dist
    REAL(C_DOUBLE), INTENT(IN) :: p

    !======= subroutine body =======
    value = p ! This is only here to suppress unused dummy argument warning
    value = dist%value
END FUNCTION inverse_deterministic_cdf

在这种情况下,inverse_deterministic_cdfinverse_cdf接口的实现,这就是为什么这里有未使用的p的原因。正如你所看到的,我有一种抑制未使用的伪参数的方法,但对我来说感觉不优雅。有没有人有他们如何处理这个的最佳实践? (我也希望这是编译器不可知的。)我知道如何普遍地抑制警告,但是当我有一个未使用的伪参数并且我没有预料到时,我想要被警告。

编辑添加(根据要求):

inverse_cdf接口是这样定义的:

INTERFACE inverse_cdf
    MODULE PROCEDURE inverse_distribution_cdf, inverse_normal_cdf, inverse_lognormal_cdf, inverse_deterministic_cdf
END INTERFACE

2 个答案:

答案 0 :(得分:3)

我的猜测是你需要定义一个通用接口

stuff.f90

MODULE stuff

  IMPLICIT NONE

  INTERFACE stuff_foo
    MODULE PROCEDURE foo1
    MODULE PROCEDURE foo2
  END INTERFACE stuff_foo

  CONTAINS

    FUNCTION foo1(a) RESULT(f)
    REAL :: a
    REAL :: f

      f = a

    END FUNCTION foo1

    FUNCTION foo2(a, b) RESULT(f)
    REAL :: a
    REAL :: b
    REAL :: f

      f = a + b

    END FUNCTION foo2

END MODULE stuff

main.f90时

PROGRAM main

  USE stuff

  IMPLICIT NONE

  PRINT *, stuff_foo(1.0)
  PRINT *, stuff_foo(1.0, 2.0)

END PROGRAM main

答案 1 :(得分:0)

由于您在模块中有过程(因此,过程具有显式接口),为什么不使用可选参数?例如。

之类的东西

FUNCTION inverse_cdf(dist, p) RESULT(value)
    !=========== result ============
    REAL(C_DOUBLE) :: value

    !====== input parameters =======
    TYPE(deterministic), INTENT(IN) :: dist
    REAL(C_DOUBLE), INTENT(IN), OPTIONAL :: p

    !======= subroutine body =======
    IF (PRESENT(p)) THEN
        value = dist%value * p ! Some expression using p
    ELSE
        value = dist%value
    END IF
END FUNCTION inverse_cdf