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)
我相信标准排除了使用任意符号,例如^,在定义运算符时.在2008年标准草案中,我必须提出第7.1.6.1.4段的规定
二进制定义的操作是具有x1 defined-binary-op x2或x1 intrinsic-operator x2的形式的操作,并且由函数和通用接口定义.
A中定义二进制-op是字母停靠点之间的序列,例如.cross.或.times.,和本征-操作者是在语言标准中定义的操作符(+,<,*等).
在@francescalus的推动下,我应该补充一下,序列不应超过63个字母,并且不应与任何内部运算符(例如.eq)或逻辑文字(例如.true.)相同
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |