当前位置:  开发笔记 > 编程语言 > 正文

行截断,参数列表中的语法错误

如何解决《行截断,参数列表中的语法错误》经验,为你挑选了1个好方法。

当我编译下面的程序时,我在call Coor_Trans命令行中出现错误和警告

警告:行被截断

错误:参数列表中的语法错误

我多次编译程序,但它不起作用.也许我的呼叫命令有问题.

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

Craig Estey.. 7

长度您的call发言太长.一行的默认最大宽度为132.

编译器将截断该宽度的输入行[就像它一样 - 并且用警告说明].之后,您有一条不完整的行(例如call foo(a,b,错过了结束)),这会生成第二条警告消息.

最好的解决方案是用一个continuation角色打破长线,即&:

            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)

大多数C风格的指南建议将线条保持在<= 80个字符.国际海事组织,即使有了Fortran,这也是一个很好的做法.

注意,使用GNU fortran,您可以使用-ffree-line-length-命令行选项增加限制.所以,你可以尝试-ffree-line-length-512,但是,我会继续上面的

历史脚注: 132列是高速,链条驱动,链轮进给,折叠纸,行式打印机可以打印的最大宽度.



1> Craig Estey..:

长度您的call发言太长.一行的默认最大宽度为132.

编译器将截断该宽度的输入行[就像它一样 - 并且用警告说明].之后,您有一条不完整的行(例如call foo(a,b,错过了结束)),这会生成第二条警告消息.

最好的解决方案是用一个continuation角色打破长线,即&:

            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)

大多数C风格的指南建议将线条保持在<= 80个字符.国际海事组织,即使有了Fortran,这也是一个很好的做法.

注意,使用GNU fortran,您可以使用-ffree-line-length-命令行选项增加限制.所以,你可以尝试-ffree-line-length-512,但是,我会继续上面的

历史脚注: 132列是高速,链条驱动,链轮进给,折叠纸,行式打印机可以打印的最大宽度.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有