我正在使用Fortran进行研究,有时,出于调试目的,有人会在代码中插入这样的内容:
write(*,*) 'Variable x:', varx
问题在于,有时我们忘记从代码中删除该语句,并且很难找到它的打印位置。我通常可以通过“变量x”这个名称得到一个好主意,但有时会发生信息可能不存在而且我只看到随机数字出现。
可以想象,写一个grep for write(*,*)基本上是无用的,所以我想知道是否有一种有效的方法来找到我的罪魁祸首,比如强迫每次调用write(*,*)
来打印文件和行号或跟踪标准输出。
谢谢。
答案 0 :(得分:3)
英特尔的Fortran预处理器定义了许多宏,例如__file__
和__line__
,它们将分别替换为文件名(作为字符串)和行号(作为整数)预处理器运行。有关详情consult the documentation。
GFortran提供类似的设施,consult the documentation。
也许您的编译器提供类似的功能。
答案 1 :(得分:0)
如前所述,没有Fortran - 尽管可能有编译器方法 - 可以根据需要更改write
语句的行为。但是,由于您的问题更多地与处理(无意产生的)错误代码有关,因此可以选择。
如果您在代码中无法轻易找到不需要的write(*,*)
,则表明您有许多合法的此类声明。一种解决方案是减少计数:
*
作为格式); *
作为输出单元,使用内部模块output_unit
中的iso_fortran_env
。[无论如何,有一个明确的“正确”输出格式是一个好主意。]
如果失败,请使用您的版本控制系统将旧的“好”版本与新的“坏”版本进行比较。甚至可能让您的版本控制系统标志/块提交新write(*,*)
s。
如果所有这些仍无济于事,那么前面提到的预处理器宏可能是最后的选择。