【发布时间】:2012-02-28 17:37:51
【问题描述】:
总而言之,是否可以通过使用关联访问在 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。理想情况下,我更愿意在错误模块本身中定义上述预处理器。但是,当使用该模块时,此预处理器指令不适用于 uses 此模块的程序/模块。
有没有办法通过使用关联使预处理器指令可访问?
我能想到的唯一其他方法是只使用错误模块并在我对编译器的调用中定义预处理器指令(例如,使用带有 ifort 的 -D 标志)。任何关于实现上述任何替代方法的建议将不胜感激。
【问题讨论】:
标签: module preprocessor fortran