Fortran 中 1 处的意外语句函数
Unexpected Statement Function at 1 in Fortran
我是 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
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,但我仍然建议使用 implicit none
或至少一个等效的编译器选项来强制显式声明所有内容。隐式类型是邪恶的,会导致错误。
正如 High Performance Mark 提醒的那样,语法
f(k) = something
声明一个称为语句函数的功能(现在在 Fortran 95 及更高版本中已过时)。它声明了一个参数 k
的函数。编译器识别您的意思是数组引用的唯一方法是正确声明数组。编译器抱怨语句函数是意外的,因为声明必须放在可执行语句之前。
你在 write
语句中隐含的 do 循环无论如何都是 Fortran 90,所以在 21 世纪不需要坚持使用 FORTRAN 77。
其他提示:
status='unknown'
是多余的,这是默认的,把它去掉就行了。
你可以只写 r = 1
和 x00 = 0
.
我是 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
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,但我仍然建议使用 implicit none
或至少一个等效的编译器选项来强制显式声明所有内容。隐式类型是邪恶的,会导致错误。
正如 High Performance Mark 提醒的那样,语法
f(k) = something
声明一个称为语句函数的功能(现在在 Fortran 95 及更高版本中已过时)。它声明了一个参数 k
的函数。编译器识别您的意思是数组引用的唯一方法是正确声明数组。编译器抱怨语句函数是意外的,因为声明必须放在可执行语句之前。
你在 write
语句中隐含的 do 循环无论如何都是 Fortran 90,所以在 21 世纪不需要坚持使用 FORTRAN 77。
其他提示:
status='unknown'
是多余的,这是默认的,把它去掉就行了。
你可以只写 r = 1
和 x00 = 0
.