Gcc Fortran语法基础?

Gcc Fortran语法基础?,gcc,cygwin,gfortran,fortran95,Gcc,Cygwin,Gfortran,Fortran95,所以我试图让我的Fortran 95代码只用于基本函数和程序定义。实际上,每一行说“意外”或“未分类”都会出现一个错误。我想知道这是我的编译器(cygwin终端中使用的gfortran)还是我应该在文件的开头放一些东西?如果有人能告诉我什么,就给你 double precision :: pi = 3.14159265359 PROGRAM Diffraction write (*,*) sinc(0) write (*,*) s

所以我试图让我的Fortran 95代码只用于基本函数和程序定义。实际上,每一行说“意外”或“未分类”都会出现一个错误。我想知道这是我的编译器(cygwin终端中使用的gfortran)还是我应该在文件的开头放一些东西?如果有人能告诉我什么,就给你

    double precision :: pi = 3.14159265359

    PROGRAM Diffraction
            write (*,*) sinc(0)
            write (*,*) sinc(pi)
            write (*,*) 1_Slit(0, 1, 550E-9)
    end PROGRAM Diffraction

    function SINC(angle) result(sinc)
    double precision :: sinc
    double precision :: angle
    if angle == 0.0 then
            sinc == 1
    else
            sinc = (sin(angle)/angle)
    endif
    end function SINC

    function I(angle, d, wl) result(I)
            double precision :: I_0 = 0.01
            double precision :: angle, d, wl, I
            A = (d * pi)/wl
            B = SIN(angle)
            I = I_0 * (SINC(A*B)**f2)
    return
    end function I
我编译的方式是:
gfortran.f95

一般来说,最好将所有定义放在主程序或模块中。所以你的“浮动”定义有点奇怪

您的程序应该以
program[name]
开头,然后是您使用的模块。在您的情况下,没有这样的模块。在此之后,编写
隐式NONE
是一个很好的实践。这意味着,没有任何变量具有预定义的类型。否则,从
I
N
的每个变量都将是
INTEGER
类型,而所有其他变量都将是
REAL
类型

下一部分是变量定义部分,在这里定义变量。(示例中的第一行。)

在此之后,主要部分如下,在这里执行代码

最后一部分是
包含
部分,其中放置了函数和子例程,可以使用程序中定义的每个变量(但这将是不好的实践…)

因此,您的示例(带有一些更正)如下所示:

PROGRAM Diffraction
IMPLICIT NONE

double precision :: pi = 3.14159265359d0

  write (*,*) sinc(0.d0)
  write (*,*) sinc(pi)
  write (*,*) one_slit(0.d0, 1.d0, 550.d-9)

CONTAINS

  function SINC(angle) result(snc)
    double precision :: snc
    double precision :: angle

    if (angle == 0.d0) then
      snc = 1.d0
    else
      snc = (sin(angle)/angle)
    endif
  end function SINC

  function one_slit(angle, d, wl) result(I)
    double precision :: I0 = 0.01d0, A, B
    double precision :: angle, d, wl, I, f2=2.d0

      A = (d * pi)/wl
      B = SIN(angle)
      I = I0 * (SINC(A*B)**f2)
  end function one_slit

end PROGRAM Diffraction

一般来说,最好将所有定义放在主程序或模块中。所以你的“浮动”定义有点奇怪

您的程序应该以
program[name]
开头,然后是您使用的模块。在您的情况下,没有这样的模块。在此之后,编写
隐式NONE
是一个很好的实践。这意味着,没有任何变量具有预定义的类型。否则,从
I
N
的每个变量都将是
INTEGER
类型,而所有其他变量都将是
REAL
类型

下一部分是变量定义部分,在这里定义变量。(示例中的第一行。)

在此之后,主要部分如下,在这里执行代码

最后一部分是
包含
部分,其中放置了函数和子例程,可以使用程序中定义的每个变量(但这将是不好的实践…)

因此,您的示例(带有一些更正)如下所示:

PROGRAM Diffraction
IMPLICIT NONE

double precision :: pi = 3.14159265359d0

  write (*,*) sinc(0.d0)
  write (*,*) sinc(pi)
  write (*,*) one_slit(0.d0, 1.d0, 550.d-9)

CONTAINS

  function SINC(angle) result(snc)
    double precision :: snc
    double precision :: angle

    if (angle == 0.d0) then
      snc = 1.d0
    else
      snc = (sin(angle)/angle)
    endif
  end function SINC

  function one_slit(angle, d, wl) result(I)
    double precision :: I0 = 0.01d0, A, B
    double precision :: angle, d, wl, I, f2=2.d0

      A = (d * pi)/wl
      B = SIN(angle)
      I = I0 * (SINC(A*B)**f2)
  end function one_slit

end PROGRAM Diffraction

没有关系。我花了一点时间查看BNF的子程序等,并消除了所有错误。既然您是在windows平台上,为什么不使用Silverfrost呢。它有一个内置的IDE(甚至可以使用VisualStudioExpress IDE),非常好。只需单击错误消息,它将带您进入代码行。一旦语法正确,您可以切换回gfortran以获得更快的速度,或者您可以从silverfrost.Nevermind运行它。我花了一点时间查看BNF的子程序等,并消除了所有错误。既然您是在windows平台上,为什么不使用Silverfrost呢。它有一个内置的IDE(甚至可以使用VisualStudioExpress IDE),非常好。只需单击错误消息,它将带您进入代码行。一旦语法正确,您可以切换回gfortran以获得更快的速度,或者您可以从silverfrost运行它。我还将向pi添加
参数
。我还将向pi添加
参数