Fortran中1处的意外语句函数
我是Fortran新手,写这个小程序是为了写出一个圆的100个有序对 但是我得到了上面提到的错误,我不知道如何解决Fortran中1处的意外语句函数,fortran,fortran77,Fortran,Fortran77,我是Fortran新手,写这个小程序是为了写出一个圆的100个有序对 但是我得到了上面提到的错误,我不知道如何解决 implicit real*8(a-h,o-z) parameter(N=100) parameter(pi = 3.14159265358979d0) integer*8 k dtheta=2*pi/N r=1.0d0 x00=0.0d0 y00=0.0d0 do k=0,N-1 xb(k)=r*cos(k*dtheta)-x00
implicit real*8(a-h,o-z)
parameter(N=100)
parameter(pi = 3.14159265358979d0)
integer*8 k
dtheta=2*pi/N
r=1.0d0
x00=0.0d0
y00=0.0d0
do k=0,N-1
xb(k)=r*cos(k*dtheta)-x00
yb(k)=r*sin(k*dtheta)-y00
enddo
open(64,file='xbyb.m',status='unknown')
write(64,*) (xb(k),k=0,N-1),(yb(k),k=0,N-1)
close(64)
end
您没有声明数组
xb
和yb
虽然从技术上讲不是FORTRAN 77,但我仍然建议使用隐式无
或至少使用等效的编译器选项来强制显式声明所有内容。隐式类型是邪恶的,会导致bug
正如High Performance Mark所提醒的,语法
f(k) = something
声明一个称为语句函数的功能(在Fortran 95及更高版本中现已过时)。它声明了一个具有一个参数k
的函数。编译器识别数组引用的唯一方法是正确声明数组。编译器抱怨语句函数意外,因为声明必须放在可执行语句之前
不管怎样,write
语句中隐含的do循环是Fortran 90,因此在21世纪不需要坚持使用Fortran 77
其他提示:
status='unknown'
是冗余的,这是默认设置,只需将其忽略即可。
您只需编写
r=1
和x00=0
就可以了,您不需要声明数组xb
和yb
虽然从技术上讲不是FORTRAN 77,但我仍然建议使用隐式无
或至少使用等效的编译器选项来强制显式声明所有内容。隐式类型是邪恶的,会导致bug
正如High Performance Mark所提醒的,语法
f(k) = something
声明一个称为语句函数的功能(在Fortran 95及更高版本中现已过时)。它声明了一个具有一个参数k
的函数。编译器识别数组引用的唯一方法是正确声明数组。编译器抱怨语句函数意外,因为声明必须放在可执行语句之前
不管怎样,write
语句中隐含的do循环是Fortran 90,因此在21世纪不需要坚持使用Fortran 77
其他提示:
status='unknown'
是冗余的,这是默认设置,只需将其忽略即可。
你可以写
r=1
和x00=0
对不起,我觉得FORTRAN和这个问题非常有趣。。。我想我明白了,编译器很难将xb和yb引用理解为数组,并认为它们可能是一种古老的功能,称为“语句函数”。。。。但错误消息中还有一个谜团:“为什么语句函数为1”是意外的?我的意思是它显然不是第#1行?@Travis语句函数不能出现在那里。它必须放在类型和变量声明之后。顺便说一句,近30年来它一直被称为Fortran,而不是Fortran。我观察到的不是错误消息的主题,而是位置。消息本身充其量也不清楚在哪里遇到了问题。“1处的语句函数意外”?“at 1”是什么意思?为什么编译器认为它在“at 1”遇到了这个问题?对于像FORTRAN这样的分析型语言,或者如果你坚持的话,我想我希望它更准确,或者至少更具体地描述它遇到的问题。@Travis这就是所有gfortran,或者甚至所有GCC错误消息的工作原理。错误消息中引用了一行,下面是数字1,它标记了该行中的特定列。它的字面意思是“在1”而不是“在1行”对不起,我发现FORTRAN和这个问题非常有趣。。。我想我明白了,编译器很难将xb和yb引用理解为数组,并认为它们可能是一种古老的功能,称为“语句函数”。。。。但错误消息中还有一个谜团:“为什么语句函数为1”是意外的?我的意思是它显然不是第#1行?@Travis语句函数不能出现在那里。它必须放在类型和变量声明之后。顺便说一句,近30年来它一直被称为Fortran,而不是Fortran。我观察到的不是错误消息的主题,而是位置。消息本身充其量也不清楚在哪里遇到了问题。“1处的语句函数意外”?“at 1”是什么意思?为什么编译器认为它在“at 1”遇到了这个问题?对于像FORTRAN这样的分析型语言,或者如果你坚持的话,我想我希望它更准确,或者至少更具体地描述它遇到的问题。@Travis这就是所有gfortran,或者甚至所有GCC错误消息的工作原理。错误消息中引用了一行,下面是数字1,它标记了该行中的特定列。它的字面意思是“在1”而不是“在1行”