Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 隐式类型声明什么时候有用?_Fortran_Fortran77 - Fatal编程技术网

Fortran 隐式类型声明什么时候有用?

Fortran 隐式类型声明什么时候有用?,fortran,fortran77,Fortran,Fortran77,我有一位同事编写Fortran,通常遵循F77标准。我不得不使用他们的一些源代码,我发现隐式类型声明(不使用implicit none)的使用非常令人困惑和沮丧。他们这样做的原因是为了“在我的程序开始时消除所有这些类型声明。”在我看来,这是一个糟糕的权衡,因为它破坏了程序及其许多子例程的可读性和理解性。在Fortran程序和子例程中不包含隐式无还有其他更有效的原因吗?简单地说,许多人不赞成使用隐式类型。有充分的理由。然而,有一种情况下,有些人可能会认为隐式类型是两个弊病中较小的一个 隐式类型允许

我有一位同事编写Fortran,通常遵循F77标准。我不得不使用他们的一些源代码,我发现隐式类型声明(不使用
implicit none
)的使用非常令人困惑和沮丧。他们这样做的原因是为了“在我的程序开始时消除所有这些类型声明。”在我看来,这是一个糟糕的权衡,因为它破坏了程序及其许多子例程的可读性和理解性。在Fortran程序和子例程中不包含
隐式无
还有其他更有效的原因吗?

简单地说,许多人不赞成使用隐式类型。有充分的理由。然而,有一种情况下,有些人可能会认为隐式类型是两个弊病中较小的一个

隐式类型允许一个对象的类型是在作用域中名称不可访问的:

  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下,当您的代码是一堆穿孔卡片时,不能使用
隐式无

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

我有一位老警卫同事,他无法阻止我使用隐式打字。他声称,对大多数变量使用隐式类型,而只对不遵循匈牙利符号的少数变量使用显式类型,可以使这些变量更加突出,这有助于他更好地理解代码


使用注释以提高可读性。这就是它们的用途。

我使用穿孔卡片,但我通常在Fortran代码中也使用隐式无穿孔卡片。然而,我现在的大部分Fortran编码只是编写数据的前处理器或后处理器。现在人们使用python的东西。我懂python,但我的python编程技能不是很好。因此,当您编写100-300行代码时,只有隐式的“无”可能是一种痛苦。我使用它是为了让人们不会取笑我,但对于简短的实用程序代码来说,隐式的none买不到什么。伊姆霍

确实,不要使用隐式类型。在我的回答中,我想说,如果不是为了这个网站更客观的需求,就没有理由使用隐式键入。我的意思是永远不要使用隐式类型,即使你有FORTRAN 77编译器或者这个答案的例子。从不。如果不能在F77中使用隐式none,是否可以像往常一样使用显式类型声明?(现代)即使使用F77代码,最好的做法也是显式声明所有内容。甚至35年前的F77编译器也大多接受
隐式none
作为非标准扩展。隐式类型并不意味着不能使用显式类型。我不完全理解您提供的示例,因此我不太可能使用这种方法=/(FWIW,不应该说“隐式类型是邪恶的;每个人都知道这一点”相反,指出使用
隐式无
的优点。是的,
隐式无;整数i
是“更多的工作”,但在这种情况下
do i=1,5;print*,ix;end do
的优点是明确的。)注释并不是代码可读性和可理解性的全部。也就是说,我欢迎在我继承的代码中添加更多的注释,我通常是一个好注释的爱好者。我错误地认为穿孔卡片应该是编译的而不是源代码。我的第一次操作系统体验是DOS和win3.1,所以我对打孔卡一无所知。这是一个关于打孔卡的视频:我真的很想看他把所有的打孔卡都扔到空中,然后大喊一声:“呼!”放心,如果我发现你在10行代码中漏掉了
隐式无
,我会指着你笑的:-)当然,对于程序来说,它所能为您节省的只是在运行时试图找出那个神秘的错误的时间,而这个错误在键入时被证明是一个拼写错误!