使用 gfortran 在 Fortran 90 中编写和调用纯子例程时,如何找出编译器发出此错误的原因?
Error: Subroutine call to XXXX at (1) is not PURE
我将尝试尽可能具体地提出我的问题,同时又足够笼统以对其他人有用,因此我将避免粘贴我的实际代码,而是会勾勒出发生的事情。
我知道 Fortran 90 中有关于纯过程的各种规则,我认为这些规则基本上可以归结为不允许函数或子例程中的副作用,并且不允许更改用intent(in)
. 我有一系列最初没有声明为纯的子程序,其参数没有声明意图,但仍然没有执行副作用。首先,我将所有参数声明更改为具有明确声明的意图,即in
、out
或inout
。然后,我将所有子例程声明为PURE
. 当然,第一次尝试时出现了很多错误,但是编译器告诉我错误是什么(例如intent(in)
正在修改某某参数),所以我一个一个地修复了它们。
但是,这些程序之间存在调用,所以现在我仍然收到许多如上所示形式的错误:Subroutine call to XXXX at (1) is not PURE
. 我不明白为什么这个电话不纯。我已经做了所有我能想到的让 XXXX 纯净的事情,但编译器仍然认为它不是。
所以我的问题——改写——是:我如何让 gfortran 告诉我为什么它认为 XXXX 不纯?