【发布时间】:2020-05-27 20:13:14
【问题描述】:
我有一个同事写 Fortran,一般遵循 F77 标准。我不得不使用他们的一些源代码,我发现使用隐式类型声明(不使用implicit none)真的很令人困惑和沮丧。他们这样做的原因是“在我的程序开始时消除所有这些类型声明”。在我看来,这是一个糟糕的权衡,因为它破坏了程序及其许多子例程的可读性和理解力。在 Fortran 程序和子例程中是否还有其他更有效的不原因,包括 implicit none?
【问题讨论】:
我有一个同事写 Fortran,一般遵循 F77 标准。我不得不使用他们的一些源代码,我发现使用隐式类型声明(不使用implicit none)真的很令人困惑和沮丧。他们这样做的原因是“在我的程序开始时消除所有这些类型声明”。在我看来,这是一个糟糕的权衡,因为它破坏了程序及其许多子例程的可读性和理解力。在 Fortran 程序和子例程中是否还有其他更有效的不原因,包括 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。
【讨论】:
implicit none 作为非标准扩展。隐式输入并不意味着不能使用显式输入。
implicit none 的优点。是的,implicit none; integer i 是“更多工作”,但在do i=1,5; print*, ix; end do 情况下的优势很明显。)
如果您的代码是一堆不能随意丢弃或乱放的打孔卡,那么减少行数的方法就很有意义。在现代,没有理由使用隐式类型。
我有一个老同事,他不能被劝阻使用隐式类型。他声称对大多数变量使用隐式类型,而只对那些不遵循匈牙利表示法的少数变量使用显式类型,可以使这些变量更加突出,这有助于他更好地理解代码。
使用 cmets 以提高可读性。这就是他们的目的。
【讨论】:
嗯,我使用了穿孔卡片,但我通常在我的 Fortran 代码中也使用隐式无。然而,我现在的大部分 Fortran 编码只是编写数据的预处理器或后处理器。人们现在使用 python 的东西。我知道python,但我的python编程技能不是那么好。因此,当您编写 100-300 行代码时,只有隐含的 none 可能会很痛苦。我使用它是为了让人们不会取笑我,但对于简短的实用程序代码,隐含的没有给你买很少的东西。恕我直言!
【讨论】:
implicit none,我会指着你大笑 :-) 当然,对于程序,它为你带来的只是你节省的时间试图找出运行时的神秘错误,结果是打字时的拼写错误!