自动检查列宽超过72

cho*_*ger -4 syntax warnings fortran lint

所以我继承了用Fortran编写的这个(不是真正遗留的)项目.为了使它成为线程安全的,我必须将一个void*指针(称为user_data,你可能知道模式)传递给所有fortran例程,以便它们可以将它传递回回调(因此全局状态现在已正确分配堆).

令我真诚的惊讶的是,这导致了在最奇怪的地方完全崩溃和断块.毕竟,我只为所有函数添加了一个未更改的参数?

令我完全恐惧(我不是Fortran程序员,只是一个有解决问题诀窍的普通黑客),我了解到Fortran编译器只是忽略了第72列之外的所有内容,可能是因为列很昂贵或者其他东西,甚至没有发出警告(除了某些"类型错误"(Fortran中的haha类型 - 纪律,这是一个笑话)报道的情况).

直到今天,我一直在代码中找到遭受这种意外的意外后果的地方.

有没有可以在这种错误中可靠地检查Fortran代码库的工具?

并且,作为John Oliver的奖金问题:为什么72列限制仍然是一个问题?

Ale*_*ogt 5

有没有可以在这种错误中可靠地检查Fortran代码库的工具?

是的,你的编译器.有了gfortran,这将是-Wline-truncation(包含在-Wall你应该拥有的东西中).有ifort,这将是-warn truncated_source.我敢打赌,(差不多)任何其他编译器都有这个选项.

列数限制为72,历史上从穿孔卡开始增长,并保持向后兼容性.对于大多数编译器,您可以更改甚至禁用此限制.有了gfortran这将是-ffixed-line-length-<n>一个整数<n>,并-ffixed-line-length-0禁用它.