[英]How does Fortran return arrays?
Fortran庫CUBPACK中的子例程Rule_Tn
需要一個描述集成矢量函數的參數Integrand
。 它是
INTERFACE
FUNCTION Integrand(NF,X) RESULT(Value)
USE Precision_Model
INTEGER, INTENT(IN) :: NF
REAL(KIND=STND), DIMENSION(:), INTENT(IN) :: X
REAL(KIND=STND), DIMENSION(NF) :: Value
END FUNCTION Integrand
END INTERFACE
由於我想從C代碼中調用Rule_Tn
,因此我需要在C中定義一個與上述接口完全匹配的函數類型。 因此,我嘗試找出Fortran函數如何返回數組。 起初我認為以下C簽名
void Integrand(double* value, const int* nf, const int* x);
與上面的界面匹配。 但是很不對! 我遇到了段錯誤。 而且我已經測試過double是REAL(KIND=STND)
的對應類型, STND
來自模塊Precision_Model
。
現在誰能告訴我什么是正確的簽名? 我正在使用GNU Fortran和C編譯器。
參見GNU文檔 。 看起來您在Fortran和C之間以不同的順序提供了參數。嘗試將value
放在C原型的最后。
另外,您在FUNCTION
行上缺少bind(C)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.