【问题标题】:Is there a difference when declaring a variable with a double colon用双冒号声明变量时有区别吗
【发布时间】:2014-03-03 18:12:15
【问题描述】:

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

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

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

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

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

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

另外,这与SAVE 属性有什么关系吗?不久前,我的一些代码出现了意外行为,我在调用之间保存了函数的结果,这迫使我在每次调用函数时都将变量显式设置为零,即使 SAVE 属性没有设置由我。

【问题讨论】:

标签: fortran fortran90


【解决方案1】:

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

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 强制 aSAVEed,这可能涵盖您问题的第二部分。

【讨论】:

  • 就是这样,默认保存行为出乎意料。再次查看 ifort 文档可以回答我所有的问题。 :: 可以被排除并且保存是非标量局部变量的默认值。我的变量是一个数组,这让我相信如果数组不是标量,这就是问题所在。
  • 可能值得明确指出,初始化还需要:: 以及暗示SAVE
猜你喜欢
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多