2

我是 FORTRAN 77 的新手,我不明白为什么第一个代码显示错误,而第二个代码在我希望它们执行相同操作时编译。

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

program FOO

integer x, y

x = 1
y = 2

integer z 

z = 3

end

这段代码在功能上看起来与第一个代码 100% 相似,编译时没有错误

program FOO

integer x, y, z

x = 1
y = 2
z = 3

end

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

4

4 回答 4

7

Fortran 是那些古朴的“定义一切都在顶部”的语言之一。换句话说,这很好:

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

因为所有类型规范都在任何可执行代码之前。如果你定义一个变量,你应该先定义它。例如,请参见此处:

这种不可执行的语句必须放在程序的开头,在第一个可执行语句之前。

于 2011-06-28T08:17:42.373 回答
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,有变量赋值。

于 2011-06-28T08:19:55.033 回答
1

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

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

你可以写:

program FOO
ijk
ifjkask    
end

并且 ijk 和 ifjkask 将是 INTEGER 值。

于 2011-06-28T08:31:17.047 回答
1

@paxdiablo:你想得对!

和错误消息:

“……意外的数据声明声明在……”

所有 DELCARATION 必须在第一个语句出现之前进行。fortran77 真的很“旧”,如果在 F95 中更改,我不放心

于 2011-06-28T08:22:00.677 回答