Gfortran:将纯函数视为正常函数以进行调试?

时间:2013-09-26 20:12:04

标签: debugging fortran gfortran

我需要在使用gfortran编译的fortran程序中调试一些pure函数。有没有办法忽略pure语句,这样我可以毫不费力地在这些write函数中使用printpure等等? 不幸的是,删除pure语句并不容易。

2 个答案:

答案 0 :(得分:7)

您可以使用宏并使用-cpp标记。

#define pure 

pure subroutine s
 print *,"hello"
end

答案 1 :(得分:4)

我通常使用预处理器来执行此任务:

#ifdef DEBUG
subroutine test(...)
#else
pure subroutine(...)
#endif
  ! ...
#ifdef DEBUG
  write(*,*) 'Debug output'
#endif
  ! ...
end subroutine

然后,您可以使用gfortran -DDEBUG编译代码以获得详细输出。 (事实上​​,我个人并没有在全局设置此标志,而是在我要调试的文件的开头通过#define DEBUG

我还定义了一个MACRO来简化调试写语句的使用:

#ifdef DEBUG
#define dwrite write
#else
#define dwrite ! write
#endif

有了这个,上面的代码简化为:

#ifdef DEBUG
subroutine test(...)
#else
pure subroutine(...)
#endif
  ! ...
  dwrite (*,*) 'Debug output'
  ! ...
end subroutine

您可以为-cpp启用gfortran预处理器,为-fpp启用ifort。当然,使用.F90.F时,默认情况下会启用预处理器。