【发布时间】:2009-09-30 15:45:21
【问题描述】:
在 Fortran 90 中使用 gfortran 编写和调用纯子例程时,我如何找出编译器发出此错误的原因?
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 成为纯的,但编译器仍然认为它不是。
所以我的问题 --rephrased -- 是:我如何让 gfortran 告诉我为什么它认为 XXXX 不纯?
【问题讨论】:
-
也许你可以发布你的代码,然后我们将返回一个通用的答案?