线截断,参数列表中的语法错误 [英] Line truncated, Syntax error in argument list
问题描述
当我编译下面的程序时,我在调用Coor_Trans
命令行时出现错误和警告:
< blockquote>
警告:行被截断
错误:参数列表中的语法错误
我多次编译该程序,但不起作用。
程序3D
隐式无
可能是我的调用命令有问题。整数:: i,j,k
整数,参数:: FN = 2,FML = 5,FMH = 5
整数,参数:: NBE = FN * FML * FMH
real,参数:: pi = 4 * atan(1.0)
real(kind = 4),dimension(1:FN,1:FML + 1,1:FMH + 1):: BEXL,BEYL,BEZL
实数(种类= 4),尺寸(1:FN,1:FML,1:FMH):: BEXC,BEYC,BEZC,BE2A,BE2B,ANGLE
实数(种类= 4) NBE,1:1,1:1):: BEXC1,BEYC1,BEZC1,BE2A1,BE2B1,ANGLE1
实数(种类= 4),维度(1:NBE,1:NBE):: LOC_PTS1,LOC_PTS2, LOC_PTS3
real :: LOC_1,LOC_2,LOC_3
do i = 1,FN
do j = 1,FML
do k = 1,FMH $ b $ (B,B,B)(B,B,B)(b,b,b)BEXC(i,j,k)= 0.5 * BEXL(i,j,k)+ BEXL (BEYL(i,j,k)+ BEYL(i,j + 1,k)),其中BEYL(i,j,k) i,j,k + 1))
BE2A(i,j,k)= FL(i)/ FML + j * 0 + k * 0
BE2B(i,j,k)= FH(i)/ FMH + j * 0 + k * 0
ANGLE(i,j,k)= BETA(i)+ j * 0 + k * 0
end do
end do
end do
BEXC1 =重塑(BEXC,(/ NBE,1,1 /))
BEYC1 = (BEEC,(/ NBE,1,1 /))
BEZC1 =重塑(BEZC,(/ NBE,1,1 /))
BE2A1 =重塑(BE2A,(/ NBE,1,1 / 1 /))
BE2B1 =重塑(BE2B,(/ NBE,1,1 /))
ANGLE1 =重塑(ANGLE,(/ NBE,1,1 /))
do i = 1,NBE
do j = 1,NBE
call Coor_Trans(BEXC1(i,1,1),BEYC1(i,1,1),BEZC1(i ,1,1),BEXC1(j,1,1),BEYC1(j,1,1),BEZC1(j,1,1),ANGLE1(j,1,1),LOC_1,LOC_2,LOC_3)
LOC_PTS1(i,j)= LOC_1
LOC_PTS2(i,j)= LOC_2
LOC_PTS3(i,j)= LOC_3
end do
end do
结束程序3D
子程序Coor_Trans(GLOB_PTSX1,GLOB_PTSY1,GLOB_PTSZ1,GLOB_PTSX2,GLOB_PTSY2,GLOB_PTSZ2,BETA,LOC_PTS1,LOC_PTS2,LOC_PTS3)
含蓄(in):: GLOB_PTSX1,GLOB_PTSY1,GLOB_PTSZ1,GLOB_PTSX2,GLOB_PTSY2,GLOB_PTSZ2,BETA
real(kind = 4),intent(out):: LOC_PTS1, LOC_PTS2,LOC_PTS3
real,parameter :: pi = 4 * atan(1.0)
real :: E1,E2
E1 = cos(BETA / 180 * pi)
E2 = sin(BETA / 180 * pi)
LOC_PTS1 =(GLOB_PTSX1-GLOB_PTSX2)* E1 +(GLOB_PTSY1-GLOB_PTSY2)* E2
LOC_PTS2 =(GLOB_PTSZ1-GLOB_PTSZ2)
LOC_PTS3 = - (GLOB_PTSX1- GLOB_PTSX2)* E2 +(GLOB_PTSY1-GLOB_PTSY2)* E1
!return
结束子程序Coor_Trans
您的调用
语句的长度太长。一行的默认最大宽度是 132 。
编译器会在这个宽度处截断输入行,与警告]。之后,你有一个不完整的行(例如调用foo(a,b
缺少关闭)
),其中生成第二条警告信息。
最好的解决方法是用一个 continuation
字符来分隔长字符串,即&
:
调用Coor_Trans(BEXC1(1,1) ),BEYC1(i,1,1),BEZC1(i,1,1),&
BEXC1(j,1,1),BEYC1(j,1,1),BEZC1(j, 1),&
ANGLE1(j,1,1),LOC_1,LOC_2,LOC_3)
大多数C风格的指南建议保持行<= 80个字符。国际海事组织,这是一个很好的习惯,即使是Fortran。
请注意,使用GNU fortran,您可以使用 - 无限行长 - < n>
命令行选项。所以,你可以尝试 -ffree-line-length-512
,但是,我会继续上面的
历史脚注: 132列是高速,链条驱动,链轮送纸,折叠式纸张,行式打印机可以打印的最大宽度。
When I compile the program below, I have an error and a warning in the call Coor_Trans
command line as
Warning: Line truncated
Error: Syntax error in argument list
I compile the program several times, but it does not work. Maybe there is something wrong with my call command.
program 3D
implicit none
integer :: i,j,k
integer, parameter :: FN=2,FML=5,FMH=5
integer, parameter :: NBE=FN*FML*FMH
real, parameter :: pi = 4*atan(1.0)
real(kind=4), dimension(1:FN,1:FML+1,1:FMH+1) :: BEXL,BEYL,BEZL
real(kind=4), dimension(1:FN,1:FML,1:FMH) :: BEXC,BEYC,BEZC,BE2A,BE2B,ANGLE
real(kind=4), dimension(1:NBE,1:1,1:1) :: BEXC1,BEYC1,BEZC1,BE2A1,BE2B1,ANGLE1
real(kind=4), dimension(1:NBE,1:NBE) :: LOC_PTS1,LOC_PTS2,LOC_PTS3
real :: LOC_1,LOC_2,LOC_3
do i=1,FN
do j=1,FML
do k=1,FMH
BEXC(i,j,k) = 0.5*(BEXL(i,j,k) + BEXL(i,j+1,k))
BEYC(i,j,k) = 0.5*(BEYL(i,j,k) + BEYL(i,j+1,k))
BEZC(i,j,k) = 0.5*(BEZL(i,j,k) + BEZL(i,j,k+1))
BE2A(i,j,k) = FL(i)/FML + j*0 + k*0
BE2B(i,j,k) = FH(i)/FMH + j*0 + k*0
ANGLE(i,j,k) = BETA(i) + j*0 + k*0
end do
end do
end do
BEXC1 = reshape(BEXC,(/NBE,1,1/))
BEYC1 = reshape(BEYC,(/NBE,1,1/))
BEZC1 = reshape(BEZC,(/NBE,1,1/))
BE2A1 = reshape(BE2A,(/NBE,1,1/))
BE2B1 = reshape(BE2B,(/NBE,1,1/))
ANGLE1 = reshape(ANGLE,(/NBE,1,1/))
do i=1,NBE
do j=1,NBE
call Coor_Trans(BEXC1(i,1,1),BEYC1(i,1,1),BEZC1(i,1,1),BEXC1(j,1,1),BEYC1(j,1,1),BEZC1(j,1,1),ANGLE1(j,1,1),LOC_1,LOC_2,LOC_3)
LOC_PTS1(i,j) = LOC_1
LOC_PTS2(i,j) = LOC_2
LOC_PTS3(i,j) = LOC_3
end do
end do
end program 3D
subroutine Coor_Trans(GLOB_PTSX1,GLOB_PTSY1,GLOB_PTSZ1,GLOB_PTSX2,GLOB_PTSY2,GLOB_PTSZ2,BETA,LOC_PTS1,LOC_PTS2,LOC_PTS3)
implicit none
real(kind=4), intent(in) :: GLOB_PTSX1,GLOB_PTSY1,GLOB_PTSZ1,GLOB_PTSX2,GLOB_PTSY2,GLOB_PTSZ2,BETA
real(kind=4), intent(out) :: LOC_PTS1,LOC_PTS2,LOC_PTS3
real, parameter :: pi = 4*atan(1.0)
real :: E1,E2
E1 = cos(BETA/180*pi)
E2 = sin(BETA/180*pi)
LOC_PTS1 = (GLOB_PTSX1-GLOB_PTSX2)*E1 + (GLOB_PTSY1-GLOB_PTSY2)*E2
LOC_PTS2 = (GLOB_PTSZ1-GLOB_PTSZ2)
LOC_PTS3 = -(GLOB_PTSX1-GLOB_PTSX2)*E2 + (GLOB_PTSY1-GLOB_PTSY2)*E1
!return
end subroutine Coor_Trans
The length of your call
statement is too long. The default maximum width of a line is 132.
The compiler will truncate input lines at that width [as it did--and said so with the warning]. After that, you had an incomplete line (e.g. call foo(a,b
that was missing the closing )
) which generated the second warning message.
The best solution is to break up the long line with a continuation
character, namely &
:
call Coor_Trans(BEXC1(i,1,1),BEYC1(i,1,1),BEZC1(i,1,1), &
BEXC1(j,1,1),BEYC1(j,1,1),BEZC1(j,1,1), &
ANGLE1(j,1,1),LOC_1,LOC_2,LOC_3)
Most C-style guides recommend keeping lines at <= 80 chars. IMO, that's a good practice even with fortran.
Note, with GNU fortran, you can increase the limit with the -ffree-line-length-<n>
command line option. So, you could try -ffree-line-length-512
, but, I'd do the continuation above
Historical footnote: 132 columns was the maximum width that a high speed, chain driven, sprocket feed, fanfold paper, line printer could print.
这篇关于线截断,参数列表中的语法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!