以下FORTRAN 77代码有什么问题?

时间:2011-06-28 08:13:04

标签: fortran fortran77

我是FORTRAN 77的新手,我不明白为什么第一个代码显示错误,而第二个代码编译时我希望他们这样做。

第一个代码(不编译并在z处引用意外数据声明语句时出错):

program FOO

integer x, y

x = 1
y = 2

integer z 

z = 3

end

此代码看起来在功能上与第一个代码完全相似,但没有错误编译

program FOO

integer x, y, z

x = 1
y = 2
z = 3

end

我还尝试在第一个代码中禁用隐式变量声明而没有效果。

4 个答案:

答案 0 :(得分:7)

Fortran是其中一个古怪的“定义一切顶级”语言。换句话说,这没关系:

program FOO
    integer x, y
    integer z 
    x = 1
    y = 2
    z = 3
end

因为所有类型规范都在任何可执行代码之前。如果您来定义变量,则应首先定义它。例如,请参阅here

  

此类非可执行语句必须放在程序的开头,在第一个可执行语句之前。

答案 1 :(得分:1)

我不知道真正的解决方案但是fortran77可能不支持变量之间的任何代码。

例如

;

integer x, y, z

x = 1
y = 2
z = 3

有效但

integer x, y

x = 1
y = 2

integer z 

z = 3

不起作用。因为在两个整数定义(integer x, yinteger z)之间,有变量分配。

答案 2 :(得分:1)

@paxdiablo:你想对了!

和错误消息:

“......意外的数据声明声明......”

必须在第一个STATEMENT发生之前进行所有DELCARATION。 fortran77真的是“老”,如果在F95中改变了,我不是不舒服的

答案 3 :(得分:1)

供您参考:禁用隐式变量声明只会消除Fortan对变量的类型进行假设的能力。

隐式变量声明做出以下假设:任何以(大写或小写)开头的变量:I,J,K,L,M或N为INTEGER。任何以任何其他字母(大写或小写)开头的变量都是REAL。这仅适用于没有显式类型声明的变量。

你可以写:

program FOO
ijk
ifjkask    
end

和ijk和ifjkask将是INTEGER值。