我需要在使用gfortran编译的fortran程序中调试一些pure
函数。有没有办法忽略pure
语句,这样我可以毫不费力地在这些write
函数中使用print
,pure
等等?
不幸的是,删除pure
语句并不容易。
答案 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
时,默认情况下会启用预处理器。