什么时候隐式类型声明是好的?

When is implicit type declaration ever good?

我有个同事是写Fortran的,一般遵循F77标准。我不得不使用他们的一些源代码,我发现使用隐式类型声明(而不是使用 implicit none)确实令人困惑和沮丧。他们这样做的原因是 "eliminate all of those type declarations at the beginning of my program(s)." 在我看来,这是破坏程序及其许多子例程的可读性和理解性的糟糕权衡。在 Fortran 程序和子例程中 not 包括 implicit none 是否还有其他更有效的原因?

完全清楚,许多人不赞成依赖隐式类型。有充分的理由。但是,在一种情况下,有些人可能认为隐式类型是两害相权取其轻。

隐式类型允许一个对象具有其名称在范围内不可访问的类型:

  implicit type(badexample) (d)

  type badexample
    integer :: neverever=4
  end type badexample

  call sub

contains

  subroutine reallybad(badexample)
    integer, optional :: badexample
! With the declaration above we can't declare a local variable of explicit
! type badexample:
!   type(badexample) dontdothis
    print*, dontdothis%neverever
  end subroutine reallybad

end

真的,这是使用隐式类型的糟糕借口。可以通过其他设计选择避免的一种。


Fortran 77下当然不能用implicit none.

当您的代码是一堆不得丢弃或打乱顺序的穿孔卡片时,减少行数的方法很有意义。在现代,没有理由使用隐式类型。

我有一个老同事,他不能被劝阻而不要使用隐式类型。他声称,对大多数变量使用隐式类型,而仅对少数不遵循匈牙利符号的变量使用显式类型,可以使这些变量更加突出,这有助于他更好地理解代码。

使用注释提高可读性。这就是他们在那里的目的。

好吧,我使用了穿孔卡片,但我通常也在我的 Fortran 代码中使用隐式 none。然而,我现在的大部分 Fortran 编码只是编写预处理器或 post 数据处理器。人们现在使用 python 的东西。我知道 python 但我在 python 方面的编程技能不是很好。因此,当您编写 100-300 行代码时,只有隐式 none 可能会很痛苦。我使用它是为了让人们不会取笑我,但对于简短的实用程序代码,隐式 none 对你来说意义不大。恕我直言!