我是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
我还尝试在第一个代码中禁用隐式变量声明而没有效果。
答案 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, y
和integer 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值。