總之,是否可以通過使用關聯訪問在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