我正在閱讀一些Fortran 90代碼,並遇到一些我不熟悉的概念。 代碼的一部分,定義爲計算兩個向量的點積,dmf_dotp
爲實數,zmf_dotp
爲複數。Fortran接口,過程和函數關係
mesh.F90
:
#include mesh_inc.F90
interface dmf_dotp
module procedure dmf_dotp_1, dmf_dotp_2
end interface dmf_dotp
interface zmf_dotp
module procedure zmf_dotp_1, zmf_dotp_2
end interface zmf_dotp
在另一文件有類似功能:
R_TYPE function X(mf_dotp_1)(mesh, f1, f2, reduce, dotu) result(dotp)
R_TYPE function X(mf_dotp_2)(mesh, dim, f1, f2, reduce, dotu) result(dotp)
那麼可以調用這些函數(或多個接口?)和zmf_dotp
或dmf_dotp
。那麼這裏究竟發生了什麼?
編輯感謝Vladimir F。原來有別的定義了一些預處理宏:
#define X(x) z ## x
#define R_TYPE CMPLX
您應該多顯示一下,'R_TYPE'和'X'可能是預處理器宏。他們如何定義?這兩個文件如何連接?是否有'include'聲明? – 2014-12-19 12:12:04
@VladimirF謝謝!仔細閱讀代碼並找到包含文件。同樣在你對另一個問題的評論中,我瞭解到'##'用於字符串連接。 – dofine 2014-12-19 12:39:33
示例:http://stackoverflow.com/questions/2257248/how-to-write-wrapper-for-allocate – 2014-12-19 18:24:52