编译时奇怪的输出和分支警告

时间:2013-02-20 09:59:06

标签: fortran gfortran fortran77

我使用gfortran编译了一个fortran 77代码并得到以下错误:

10 open(23,file = outfile,status ='old',access ='append',err = 10)
                                                                        1 警告:(1)处的分支可能导致无限循环

这种情况多次发生。

其中一个输出文件如下所示:

^L6a10È< 90> &< 9b>LÓLÓL< 91> 90> < 90 GT; < 90 GT; È< 8e>< 9b>LÓLÓLÕ< 93> 2   !MERCURY¢õõ/!ô< 8a>< 8a>< 90> Y'LT; 90> Y'LT; 90> ÿÌÖÏ©ü} M< 91>   “VENUS”}>±{+±< 8b>< 90>< 90>< 90><>> 90>< 8>< 8>< 8>< 8>< 8>< 8>< 8>< 8>

但是,它应该看起来像一个文本表。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您的代码行

10 open (23,file=outfile,status='old',access='append',err=10)

指定open语句应将控制转移到自身(标签10)以防遇到错误,因此任何错误都可能触发无限循环。它还会抑制错误消息的输出。如果您只想检查错误状态,我建议使用iostat和/或iomsg(Fortran 2003)参数:

open (23, file=outfile, status='old', access='append', iostat=ios, iomsg=str)

此处ios是一个整数,如果没有错误则为零,否则为非零,str是一个将记录相应错误消息的字符变量。

答案 1 :(得分:1)

err=语句中的open参数指定在open由于某种原因失败时要转移到的语句标签。您的代码指定了标记为10的行的分支,该行恰好是包含open语句的行。这可能不是一个好主意;更好的想法是分支到一条优雅处理open语句错误的行。

来自gfortran的警告现场。

对于输出文件中的明显垃圾,如果没有看到用于编写垃圾的代码(或者您认为可能是珍珠),则很难诊断并解决该问题。