我需要在每个函数和子程序中添加implicit none
吗?
还是只需要在包含这些函数和子程序的模块开头添加它就可以了?
还是只需要在使用这些模块的程序开头添加它就可以了?
通过观察别人的工作代码,这些地方都包括了implicit none
。不确定是否重复了,因为从子程序中删除implicit none
仍然可以编译并产生相同的输出。
顺便说一句,我正在使用gfortran fortran 90
。
implicit none
use somemodule
end program
implicit
语句必须跟随所有的 use
语句。implicit
语句,则默认规则将适用于该范围内。module mod
implicit none
interface
subroutine external_sub()
! The default implicit typing rules apply here unless
! there is an implicit statement, such as implicit none.
! Those from the module aren't in force here.
end subroutine
end interface
end module
关于从子程序中删除implicit none
的测试:如果代码使用implicit none
是有效的,那么没有该语句时它必须是有效且相同的。在前一种情况下,所有实体都必须明确声明,因此在后一种情况下不会应用任何隐含规则。
gfortran
,可以直接添加-fimplicit-none
参数。请注意,这是一种特定于编译器的解决方案。其他广泛使用的编译器可能不支持此参数。例如,Intel的ifort
将其忽略为未知选项。
implicit none
方面的工作方式完全相同?非常好的回答。 - NoseKnowsAll