8

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

4

2 回答 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-fppfor启用预处理器ifort。当然,在使用.F90or时.F,预处理器默认是开启的。

于 2013-09-26T20:16:24.577 回答