下面的FORTRAN 77代码有什么问题?
我完全是FORTRAN 77的新手,我不明白为什么第一个代码显示错误,而第二个代码编译时,我希望他们也这样做 第一个代码(未编译并在z处引用意外的数据声明语句时出错): 这段代码在功能上与第一段代码100%相似,编译时没有错误下面的FORTRAN 77代码有什么问题?,fortran,fortran77,Fortran,Fortran77,我完全是FORTRAN 77的新手,我不明白为什么第一个代码显示错误,而第二个代码编译时,我希望他们也这样做 第一个代码(未编译并在z处引用意外的数据声明语句时出错): 这段代码在功能上与第一段代码100%相似,编译时没有错误 program FOO integer x, y, z x = 1 y = 2 z = 3 end 我还尝试在第一段代码中禁用隐式变量声明,但没有任何效果。Fortran是一种奇特的“在顶层定义一切”语言。换句话说,这很好: program FOO int
program FOO
integer x, y, z
x = 1
y = 2
z = 3
end
我还尝试在第一段代码中禁用隐式变量声明,但没有任何效果。Fortran是一种奇特的“在顶层定义一切”语言。换句话说,这很好:
program FOO
integer x, y
integer z
x = 1
y = 2
z = 3
end
因为所有类型规范都在任何可执行代码之前。如果你要定义一个变量,你应该先定义它。例如,见:
这种不可执行语句必须放在程序的开头,在第一个可执行语句之前
我不知道真正的解决方案,但可能
fortran77
不支持变量之间的任何代码
比如,
integer x, y, z
x = 1
y = 2
z = 3
工作但是
integer x, y
x = 1
y = 2
integer z
z = 3
不起作用。因为在两个整数定义(
整数x,y
和整数z
)之间,有变量赋值。@paxdiablo:你想得对
以及错误信息:
“…位于…的意外数据声明语句”
在第一个语句出现之前,必须进行所有的DELCARATION。Fortran 77真的很“老”,如果在F95中改变了这一点,我就不是舒尔了。仅供参考:禁用隐式变量声明只会使Fortan无法对变量的类型做出假设 隐式变量声明做出以下假设:任何以(大写或小写)开头的变量:I、J、K、L、M或N都是整数。任何以任何其他字母(大写或小写)开头的变量都是实数。这仅适用于没有显式类型声明的变量 你可以写:
program FOO
ijk
ifjkask
end
ijk和ifjkack都是整数值。是的,甚至我都猜到了。但是如果是这样的话,那么它的重要信息应该在FORTRAN的书中。但是我找不到任何关于这个的参考资料。这是正确的。可执行语句必须在所有变量声明之后。这似乎是一个相当重要的方面,不是吗?添加了一个链接到一个教程,该教程建议这样做,但我想ANSI标准文档将是最好的。我有ISO C版本的,因为我在编译器上做了一些工作,但我不能真正证明Fortran版本的成本是合理的,因为没有人会为这样一个怪兽付钱给我:-)@phycker:如果你的Fortran书籍有一半的质量,它们会包含这些信息;如果他们不这样做,我会抛弃他们,去找其他人@paxdiablo:虽然官方标准文件不是免费的,但最终草案(由委员会投票决定)是免费的。gfortran wiki有一个页面,其中包含指向它们的链接:。我知道它在Fortran90中没有更改,并且我相当确定它在Fortran95中没有更改。无论如何,在函数/子例程/程序的顶部声明变量是最好的做法。从最新版本的标准Fortran 2008开始,相同的规则仍然有效。
program FOO
ijk
ifjkask
end