【发布时间】:2020-11-13 08:31:06
【问题描述】:
我目前正在编写一个代码,据我所知,它可以很好地与 ifort 一起编译。 我尝试用 gfortran 编译它,但出现以下错误:
WRITE(100, '(8ES18.10E)') a 1 Error: Positive exponent width required in format string at (1)
我对这种格式感到困惑:8ES18.10E,最后一个 E 应该是什么意思? 是不是 ifort/gfortran 不兼容?
感谢您的建议
【问题讨论】:
-
不确定,但可能格式中的第二个
E不应该出现。 -
我认为 gfortran 在最后一个
E之后拒绝没有一两个数字的格式是正确的。英特尔 Fortran 没有拒绝它并不让我感到惊讶,它只是可追溯到 60 年代的一长串编译器的最新版本。一路走来,它获得了许多非标准功能(或不再标准的功能),并且通过对向后兼容性的无限热情并没有放弃(m)其中任何一个,尽管明智地使用标志可以说服它成为在这方面更加无情。 -
我想有人应该解释格式
ES18.10E,以及为什么 gfortran 正确拒绝它。18是格式化数字的总宽度。10是小数点后的位数。尾随E需要一个整数值来指定指数中的位数。正如@HighPerformanceMark 所说,英特尔正在接受对 Fortran 标准的扩展。英特尔提供了一个请求符合 Fortran 标准的选项(请参阅其文档)。 -
ifort 接受作为扩展
ES18.10E与其说它没有义务告诉你ES18.10E不是有效的格式化项目。 -
上面所有的 cmets 都是正确的,除了它不能被认为是扩展,因为它没有意义。至于 ifort 在运行时使用无效格式做什么,我的猜测是尾随的 E 将被忽略,但这需要在每个主要版本上进行测试。如果无法对其进行检查,那将是令人失望的,而问题报告将是合理的。在 ifort 中检查的任何级别的标准都应要求符合 f95。正如 francescalus 指出的那样,Fortran 标准不需要检查所有方面的合规性。