总之,通过使用关联,可以访问在Fortran模块中定义的预处理器指令吗?
背景:我使用预处理器语句来定义打印警告和错误消息的子程序。例如,我使用以下模块/子例程,在文件“errors.f”中打印警告消息。
背景:我使用预处理器语句来定义打印警告和错误消息的子程序。例如,我使用以下模块/子例程,在文件“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 errors
#define warn( text )warn_print(__FILE__,__LINE__,text)
我会在需要使用警告打印程序的任何文件/模块中,#include
文件errors.h
,这样我就可以简单地编写:
call warn("Some warning message")
编译器将自动包含调用警告消息的文件和行号。
问题
在Fortran代码中,使用 #include 'errors.h'
是相当个性化的,它隐藏了 errors
模块的使用。理想情况下,我更喜欢在 errors 模块本身中定义上述预处理器。然而,在使用该模块时,这个预处理器指令对于 use
该模块的程序/模块不可用。
有没有一种方法可以通过 use 关联使预处理器指令可访问?
我能想到的唯一另一种方法是只有 errors 模块并在调用编译器时定义预处理器指令(例如使用 ifort 的 -D
标志)。如何实现以上目标的任何替代方案都将不胜感激。