Fortran 用双冒号声明变量时有区别吗
在声明变量时,使用双冒号是否有区别Fortran 用双冒号声明变量时有区别吗,fortran,fortran90,Fortran,Fortran90,在声明变量时,使用双冒号是否有区别 real(8) :: a real(8) b 这两种方法显然做了相同的事情。除了款式之外,这些之间还有什么区别吗 我知道我们可以按如下方式初始化变量和添加属性 real(8), intent(in), parameter :: a = 4, b = 2 但除此之外,当只声明一个没有属性且不初始化的普通旧real或integer时,有什么区别吗 另外,这是否与SAVE属性有关?不久前,我的一些代码出现了意外的行为,我在调用之间保存函数的结果,这迫使我在每次调
real(8) :: a
real(8) b
这两种方法显然做了相同的事情。除了款式之外,这些之间还有什么区别吗
我知道我们可以按如下方式初始化变量和添加属性
real(8), intent(in), parameter :: a = 4, b = 2
但除此之外,当只声明一个没有属性且不初始化的普通旧real
或integer
时,有什么区别吗
另外,这是否与
SAVE
属性有关?不久前,我的一些代码出现了意外的行为,我在调用之间保存函数的结果,这迫使我在每次调用函数时显式地将变量设置为零,即使我没有设置SAVE
属性。在第一个示例中,:
是不需要的,可以省略。一般语法为:
type-spec [ [,attr-spec]... :: ] entities
在第一种情况下:
type-spec: real(8)
entities: a and b
语法定义中的方括号表示该部分是可选的。但是,如果指定了一个attr spec
(如intent(in)
或参数
),则需要:
。具体而言:
[ [, attr-spec] :: ]
这意味着:
是可选的,attr spec
是可选的,但是如果您提供和attr spec
您还必须提供:
我怀疑人们只是养成了为每个声明提供:
的习惯
在示例中:
real :: a=4.5
=4.5
强制a
保存,这可能涵盖问题的第二部分。没错,默认保存行为是意外的。再次查看ifort文档可以回答我的所有问题。对于非标量局部变量,可以排除::并将其保存为默认值。我的变量是一个数组,这让我相信如果数组不是标量的,那么这就是问题所在。值得明确指出的是,初始化还需要:
以及SAVE
。我不建议直接使用real(8)
。使用命名常量并查看