使用双冒号声明变量时是否有区别

时间:2014-03-03 18:12:15

标签: fortran fortran90

使用双冒号时声明变量是否存在差异?

real(8) :: a
real(8) b

这两个显然都做同样的事情。这些除了风格之间有什么区别吗?

我知道我们可以初始化变量并添加属性,如下所示

real(8), intent(in), parameter :: a = 4, b = 2

但除此之外,只是声明一个没有属性且没有初始化的普通旧realinteger会有什么不同吗?

此外,这是否与SAVE属性有关?在我的一些代码中有一段时间出现意外行为,我在调用之间保存了函数的结果,这迫使我每次调用函数时显式地将变量设置为零,即使SAVE属性是不是我设定的。

1 个答案:

答案 0 :(得分:11)

在您的第一个示例中,不需要::,可以省略。一般语法是:

type-spec [ [,attr-spec]... :: ] entities

在你的第一个案例中:

type-spec: real(8)
entities: a and b

语法定义中的方括号表示该部分是可选的。但是,如果您指定attr-spec(例如intent(in)parameter),则需要::。具体做法是:

[ [, attr-spec] :: ]

表示::是可选的,而attr-spec是可选的,但如果您提供attr-spec,则必须提供::

我怀疑人们养成了为每个声明提供::的习惯。

在示例中:

real :: a=4.5

=4.5强制aSAVE,可能会涵盖您问题的第二部分。