Fortran运营商

Zeu*_*eus 3 generics fortran operator-keyword

我正在使用^实现两个向量的交叉乘积,但是我收到一个错误.不知道如何解决问题.

这是代码

Interface Operator (^)
    Module Procedure vector_cross_product
End Interface Operator (^)

Contains

Function vector_cross_product (u, v) Result (w)

    !!$ Input
    Type (Vector), Intent(in) :: u, v

    !!$ Output
    Type (Vector) :: w

    w% x = (u% y * v% z) - (u% z * v% y)
    w% y = (u% z * v% x) - (u% x * v% z)
    w% z = (u% x * v% y) - (u% y * v% x)

End Function vector_cross_product
Run Code Online (Sandbox Code Playgroud)

这是我使用gfortran的相应错误

Interface Operator (^)
                    1
Error: Syntax error in generic specification at (1)
lib/vectors.f:110.18:

  Module Procedure vector_cross_product
                  1
Error: MODULE PROCEDURE at (1) must be in a generic module interface
lib/vectors.f:111.3:

End Interface Operator (^)
   1
Error: Expecting END MODULE statement at (1)
Run Code Online (Sandbox Code Playgroud)

Hig*_*ark 5

我相信标准排除了使用任意符号,例如^,在定义运算符时.在2008年标准草案中,我必须提出第7.1.6.1.4段的规定

二进制定义的操作是具有x1 defined-binary-op x2或x1 intrinsic-operator x2的形式的操作,并且由函数和通用接口定义.

A中定义二进制-op是字母停靠点之间的序列,例如.cross..times.,和本征-操作者是在语言标准中定义的操作符(+,<,*等).

在@francescalus的推动下,我应该补充一下,序列不应超过63个字母,并且不应与任何内部运算符(例如.eq)或逻辑文字(例如.true.)相同

  • [该序列由R723在7.1.2.8中定义.] (2认同)