现代Fortran需要数据语句吗?

现代Fortran需要数据语句吗?,fortran,fortran90,fortran77,obsolete,Fortran,Fortran90,Fortran77,Obsolete,我知道fortran中数据语句的行为。然而,我不知道是否有任何情况下它是首选或应该避免的数据语句不是过时的。然而,自Fortran 95以来,它在可执行语句中的使用已经过时。附录B给出了淘汰特征的详细信息 B.3.5可执行文件之间的数据语句。语句排序 规则允许数据语句在运行后出现在程序单元中的任何位置 规范声明。定位数据的能力 可执行语句中的语句很少出现 已使用、不必要和潜在的错误源 梅特卡夫、科恩和里德在《现代Fortran》第140页解释道(2011年的绿色版,而不是我没有的较新的红色版)

我知道fortran中数据语句的行为。然而,我不知道是否有任何情况下它是首选或应该避免的

数据语句不是过时的。然而,自Fortran 95以来,它在可执行语句中的使用已经过时。附录B给出了淘汰特征的详细信息

B.3.5可执行文件之间的数据语句。语句排序 规则允许数据语句在运行后出现在程序单元中的任何位置 规范声明。定位数据的能力 可执行语句中的语句很少出现 已使用、不必要和潜在的错误源

梅特卡夫、科恩和里德在《现代Fortran》第140页解释道(2011年的绿色版,而不是我没有的较新的红色版)

我们建议使用类型声明语句而不是数据 语句,但仅当 要初始化一个变量


考虑到其中两位作者是(负责Fortran开发的——实际上可能所有三位作者都是成员;我不确定Michael Metcalf),我们可以相当肯定地说,除非初始化变量的一部分,否则应该避免使用数据语句,在程序单元中的可执行语句之前

我个人喜欢
data
语句,因为它比普通赋值更清楚地初始化变量。例如:

型基因
字符::基因
整数::深度
整数::增量
端型
类型(基因)::池(8)
! 在这种情况下,在数据语句中初始化看起来更好
数据池%gene/'#'、'U'、'R'、'+'、'-'、'*'、'/'、'^'/
数据池%depth/0,0,1,2,2,2,2,2/
数据池%delta/1,1,0,-1,-1,-1,-1,-1,-1/

您能否更具体地定义“首选”或“应避免”的定义?事实上,这个问题可以理解为寻求意见,比如“我不喜欢数据陈述,因为……”,这使得这个问题在这里偏离了主题。早期需要一些陈述,但现在有了更好的方法,它们只是标准的一部分,因为它们不是一个完全不可行的方法,并且由于背部可移植性的原因。我不知道data语句是否是其中之一。事实上,Fortran标准包含了一系列过时的功能,并且该标准的几个版本删除了一些特定的功能。DATA语句在程序单元的声明部分使用时,不会过时。但是,有理由避免使用本列表中未列出的某些功能。但是StackOverflow不是讨论Fortran编程风格问题的地方,这些问题通常是基于观点和主观的。标题中的“推荐”一词确实有问题。本网站并非个人推荐,也没有官方风格的指南,不同书籍的推荐往往不同。我认为这个问题非常接近主题,因为关于数据声明及其与“现代”功能的差异,有很多有用的东西可以说。更改标题可能会有所帮助。我不太确定数据语句是否比相应的赋值更清晰,如
pool%gene=['#'、'U'、'R'、'+'、'-'、'*'、'/'、'^']
。然而,data语句给出显式初始化这一事实是一个重要的区别。(如果您依赖于能够在无法完成赋值的情况下使用更接近声明的数据语句,那就值得强调。)是的,francescalus。也许我没有选择一个好的例子,因为在这种情况下,普通赋值看起来几乎等于data语句。也许一个更好的例子是初始化上三角矩阵或类似的东西,作为数据语句比赋值简单得多。我仍然不明白为什么在上三角矩阵初始化中,使用数据比使用普通赋值更容易