使用双冒号时声明变量是否存在差异?
real(8) :: a
real(8) b
这两个显然都做同样的事情。这些除了风格之间有什么区别吗?
我知道我们可以初始化变量并添加属性,如下所示
real(8), intent(in), parameter :: a = 4, b = 2
但除此之外,只是声明一个没有属性且没有初始化的普通旧real
或integer
会有什么不同吗?
此外,这是否与SAVE
属性有关?在我的一些代码中有一段时间出现意外行为,我在调用之间保存了函数的结果,这迫使我每次调用函数时显式地将变量设置为零,即使SAVE
属性是不是我设定的。
答案 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
强制a
为SAVE
,可能会涵盖您问题的第二部分。