总之,是否可以通过使用关联访问在Fortran模块中定义的预处理器指令?预处理器和使用关联
语境
我用预处理语句来定义子程序打印警告和错误消息。例如,我使用下面的模块/子例程,文件errors.f
中,要打印的警告消息
module errors
use, intrinsic :: iso_fortran_env, only : error_unit=>stderr
implicit none
contains
!> Print formatted warning message.
subroutine warn_print(file, line, mesg)
implicit none
character(len=*), intent(in) :: file
integer, intent(in) :: line
character(len=*), intent(in) :: mesg
write(stderr,'(a,a,a,i4,a,a)') "WARNING::", file, ":", line, ": ", mesg
end subroutine warn_print
end module errors
,并在一个单独的文件errors.h
,我use
上述模块,并定义宏预处理器
use errors
#define warn(text)warn_print(__FILE__,__LINE__,text)
然后我#include
哪个文件/模块中的文件errors.h
我希望用警告打印程序,让我简单地写
call warn("Some warning message")
并且编译器将自动包含调用警告消息的文件和行号。
问题
使用的#include 'errors.h'
是在Fortran代码而特异反应性和它隐藏了errors
模块的use
。理想情况下,我宁愿在错误模块本身中定义上述预处理器。但是,在使用该模块时,此预处理器指令不适用于此模块的程序/模块。
有没有一种方法可以通过使用关联来访问预处理指令?
我能想到的唯一方法就是在调用编译器时使用错误模块并定义预处理器指令(例如,使用ifort的-D
标志)。对于实现上述任何替代方法的任何建议将不胜感激。
我以为这么多,这就是为什么我使用我在我的问题中描述的设置。我希望得到其他人的关于实现一个函数的不同方案的建议,这个函数会打印它被调用的文件和行号。欢迎来到So! – Chris 2012-02-07 19:23:54