当初始化一个没有数字的实数变量超过"那些"地方,是所需的尾随小数点,还是美学?

时间:2017-12-01 19:50:33

标签: fortran

简单的问题:我在大气模型中查看Fortran代码,每当声明一个实变量时,它总是被声明为例如作为real :: foo = 1.代替real :: foo = 1。是否需要尾随小数点?

从名单文件中读取参数时,这些规则是否会发生变化?例如,我可以在名单中写下

&main_nml
  foo = 1
/

而不是

&main_nml
  foo = 1.
/

并使用namelist /main_nml/ foo

读取原始模块中的变量

最后,对于不同版本的Fortran,这个答案会有所改变吗?

1 个答案:

答案 0 :(得分:3)

在源代码中出现时,如

real :: x=1
real :: y=1.

在词汇层面存在差异。在第一种情况下,1是一个文字整数常量;在第二个1.中是一个文字(默认)实常数。也就是说,作为初始化的一部分,整数1被转换为x的类型。 xy极有可能被初始化为相同的值。

这两种情况都是合法的声明,因此在这种意义上,尽管存在技术差异,但不需要小数符号。

使用名单输入时,情况略有不同。在输入文件11.中,不代表文字常量(不在源代码中)。相反,输入中的值被解释为将应用它的变量的类型。在您的情况下,假设foo默认为真实,则11.都将被视为默认实际值。

名单输入中的实际值不需要具有小数符号。没有它,价值没有分数部分。从这个意义上说,十进制符号的存在与否之间没有区别,并且值将是相同的。

如果没有深入探索,我不知道在语言修订之间如何解释这些事情会有任何变化。

现在是时候注意在考虑格式化(非名单)输入时情况非常不同。缺少小数符号可以是very confusing,具有某些格式。