Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
下面的FORTRAN 77代码有什么问题?_Fortran_Fortran77 - Fatal编程技术网

下面的FORTRAN 77代码有什么问题?

下面的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

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

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

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

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