我需要pure
在用 gfortran 编译的 fortran 程序中调试一些函数。有什么方法可以忽略这些pure
语句,这样我就可以毫不费力地在这些函数中使用write
,print
等?pure
不幸的是,仅仅删除该pure
语句并不容易。
问问题
542 次
2 回答
8
您可以使用宏并使用-cpp
标志。
#define pure
pure subroutine s
print *,"hello"
end
于 2013-09-26T20:17:05.377 回答
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
您可以使用forgfortran
和-fpp
for启用预处理器ifort
。当然,在使用.F90
or时.F
,预处理器默认是开启的。
于 2013-09-26T20:16:24.577 回答