Fortran在循环内放置格式语句

时间:2015-02-08 21:26:20

标签: fortran intel-fortran

在大多数代码中,我看到FORMAT语句放在循环之外,就在DO循环中的CONTINUE语句之后。我喜欢将它放在DO循环中,就在READ或WRITE语句之后。我不确定它是否会影响速度或引起任何混淆。在哪里放置FORMAT语句的最佳做法是:在循环内部还是外部? 谢谢,

2 个答案:

答案 0 :(得分:2)

让我说明(有点传统的)反对在write语句中使用格式字符串。

将编译单元中使用的所有格式语句放在同一单元中的某个块(传统位置在末尾)中。

这样,可以在多个写语句中使用相同的格式而无需冗余重复。这也使得期望一起使用的协调格式语句(例如表头,列标题和列数据格式)更加简单。当在多个地方使用的格式必须改变时,在write语句中放置格式字符串的做法就成了问题。在代码周围喷洒(相同的)格式字符串有点像使用多个字面值,例如pi。更好的做法是在一个地方定义一次。

至于将format语句放入循环中,我认为这是一个没有价值的奇怪想法。由于format语句更像是声明而不是可执行语句,因此在执行代码期间不会多次遇到它。如果靠近它所使用的地方对你很重要,那就把它放在循环之前或之后。

format语句的位置是否会影响代码的性能?一,我希望任何体面的编译器在编译时处理(常量)format语句并且不施加运行时负载。第二,如果您需要了解更多信息,请设置一些测试并衡量format语句位置的影响。

最后,是的,可以使用字符参数来包含格式字符串,并在write语句中使用它们。我还没有被说服这种方法与使用format语句在风格上不同。传统的方法很明显,字符串是格式字符串。

如果您已经阅读过这篇文章,请阅读下面的@ IanH评论,它就字符串常量优于format语句的优点提出了几点好处。

答案 1 :(得分:1)

最佳做法是不使用FORMAT语句,而是将格式字符串作为字符常量放入WRITE或PRINT语句本身。这使得读者在尝试理解代码的作用时不必跳转到另一个语句。

所以,而不是写

  WRITE (55,9000) A

 9000 FORMAT (4G12.5)

你应该写

 WRITE (55,'(4G12.5)') A