简单的问题:我在大气模型中查看Fortran代码,每当声明一个实变量时,它总是被声明为例如作为real :: foo = 1.
代替real :: foo = 1
。是否需要尾随小数点?
从名单文件中读取参数时,这些规则是否会发生变化?例如,我可以在名单中写下
&main_nml
foo = 1
/
而不是
&main_nml
foo = 1.
/
并使用namelist /main_nml/ foo
?
最后,对于不同版本的Fortran,这个答案会有所改变吗?
答案 0 :(得分:3)
在源代码中出现时,如
real :: x=1
real :: y=1.
在词汇层面存在差异。在第一种情况下,1
是一个文字整数常量;在第二个1.
中是一个文字(默认)实常数。也就是说,作为初始化的一部分,整数1
被转换为x
的类型。 x
和y
极有可能被初始化为相同的值。
这两种情况都是合法的声明,因此在这种意义上,尽管存在技术差异,但不需要小数符号。
使用名单输入时,情况略有不同。在输入文件1
和1.
中,不代表文字常量(不在源代码中)。相反,输入中的值被解释为将应用它的变量的类型。在您的情况下,假设foo
默认为真实,则1
和1.
都将被视为默认实际值。
名单输入中的实际值不需要具有小数符号。没有它,价值没有分数部分。从这个意义上说,十进制符号的存在与否之间没有区别,并且值将是相同的。
如果没有深入探索,我不知道在语言修订之间如何解释这些事情会有任何变化。
现在是时候注意在考虑格式化(非名单)输入时情况非常不同。缺少小数符号可以是very confusing,具有某些格式。