INTERFACE の動作がわからん
ワカランのが INTERFACE の動作なのかもわからない。MODULE の変数のスコープに関する動作を理解できていないのだろう。走らないコードと走るコードを以下に示す
MODULE typedef TYPE real8x10 REAL(8):: e(10) END TYPE INTERFACE OPERATOR (+) ! 外部手続を使って定義しようとした FUNCTION add_ (A,B) USE typedef TYPE(real8x10),INTENT(IN):: A,B TYPE(real8x10):: add_ END FUNCTION END INTERFACE END MODULE PROGRAM main USE typedef TYPE(real8x10):: A,B A%e=1.d0; B%e=2.d0; WRITE(*,*) A+B; END PROGRAM FUNCTION add_ (A,B) RESULT (C) ! 計算の本体はここ USE typedef TYPE(real8x10),INTENT(IN):: A,B TYPE(real8x10):: C C%e= A%e + B%e END FUNCTION
走るコード1
MODULE typedef TYPE real8x10 REAL(8):: e(10) END TYPE INTERFACE OPERATOR (+) MODULE PROCEDURE add ! MODULE PROCEDURE 文で呼び出す END INTERFACE CONTAINS FUNCTION add (A,B) RESULT (C) ! 手続をMODULE内部に組み込んだ TYPE(real8x10),INTENT(IN):: A,B TYPE(real8x10):: C C%e= A%e + B%e END FUNCTION END MODULE PROGRAM main USE typedef TYPE(real8x10):: A,B A%e=1.d0; B%e=2.d0; WRITE(*,*) A+B; END PROGRAM
走るコード2
MODULE typedef TYPE real8x10 REAL(8):: e(10) END TYPE END MODULE MODULE operatordef ! モジュールを分離した INTERFACE OPERATOR (+) FUNCTION add_ (A,B) USE typedef TYPE(real8x10),INTENT(IN):: A,B TYPE(real8x10):: add_ END FUNCTION END INTERFACE END MODULE PROGRAM main USE typedef USE operatordef TYPE(real8x10):: A,B A%e=1.d0; B%e=2.d0; WRITE(*,*) A+B; END PROGRAM FUNCTION add_ (A,B) RESULT (C) ! 計算の本体はここ USE typedef TYPE(real8x10),INTENT(IN):: A,B TYPE(real8x10):: C C%e= A%e + B%e END FUNCTION