自动检查列宽是否超过 72

Automatically check for column width beyond 72

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

令我由衷惊讶的是,这导致在最奇怪的地方出现完全崩溃和段错误。毕竟,我只是向所有函数添加了一个不变的参数?

令我震惊的是(我不是 Fortran 程序员,只是一个有解决问题诀窍的普通黑客),我了解到 Fortran 编译器会简单地忽略第 72 列以外的所有内容,可能是因为列很昂贵或其他原因,甚至没有发出警告(好吧,除了某些情况下 "type error"(哈哈,Fortran 中的类型纪律,真是个笑话)被报告了)。

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

是否有任何工具可以可靠地检查 Fortran 代码库是否存在此类错误?

并且,作为献给 John Oliver 的额外问题:为什么 72 列限制仍然存在?

Is there any tool out there that can check a Fortran codebase reliably for this kind of mistake?

是的,你的编译器。对于 gfortran,这将是 -Wline-truncation(包含在 -Wall 中,这是您始终应该佩戴的东西)。对于 ifort,这将是 -warn truncated_source。我敢打赌(几乎)任何其他编译器也有这方面的选择。

72 列的限制是历史上从穿孔卡片发展而来的,并为向后兼容而保留。对于大多数编译器,您可以更改甚至禁用此限制。使用 gfortran 这将是 -ffixed-line-length-<n> 和整数 <n>-ffixed-line-length-0 来禁用它。