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

Exa*_*ale 13 fortran fortran90

声明变量时使用双冒号有区别吗?

real(8) :: a
real(8) b
Run Code Online (Sandbox Code Playgroud)

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

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

real(8), intent(in), parameter :: a = 4, b = 2
Run Code Online (Sandbox Code Playgroud)

但除此之外,只是声明一个普通的旧的realinteger没有属性而不是初始化是否有任何区别?

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

Rob*_*Rob 13

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

type-spec [ [,attr-spec]... :: ] entities
Run Code Online (Sandbox Code Playgroud)

在你的第一个案例中:

type-spec: real(8)
entities: a and b
Run Code Online (Sandbox Code Playgroud)

语法定义中的方括号表示该部分是可选的.但是,如果您指定attr-spec(像intent(in)parameter),则::需要.特别:

[ [, attr-spec] :: ]
Run Code Online (Sandbox Code Playgroud)

意味着它::是可选的并且attr-spec是可选的,但如果你给,attr-spec你必须也给出::.

我怀疑人们养成了提供::每一个宣言的习惯.

在示例中:

real :: a=4.5
Run Code Online (Sandbox Code Playgroud)

要编写的=4.5力量可能涵盖你问题的第二部分.aSAVE

  • 可能值得明确地说初始化也需要`::`以及暗示`SAVE`。 (2认同)