自动检查列宽超过72

时间:2016-08-04 17:55:56

标签: syntax fortran warnings lint

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

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

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

到目前为止,我一直在代码中找到遭受此咒语意外后果的地方。

是否有任何工具能够可靠地检查Fortran代码库是否存在这种错误?

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

1 个答案:

答案 0 :(得分:5)

  

是否有任何工具能够可靠地检查Fortran代码库是否存在这种错误?

是的,你的编译器。使用gfortran,这将是-Wline-truncation(包含在-Wall中,这是您应该拥有的内容)。使用ifort,这将是-warn truncated_source。我敢打赌,(几乎)任何其他编译器都有这方面的选项。

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