线截断,参数列表中的语法错误 [英] Line truncated, Syntax error in argument list

查看:215
本文介绍了线截断,参数列表中的语法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我编译下面的程序时,我在调用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆