![](/img/trans.png)
[英]Fortran and C interoperability: passing char *string as a function's argument to Fortran
[英]Interoperability of C variadic function and Fortran
有沒有辦法聲明一個C variadic函數並從Fortran調用它? 我需要調用此函數來計算用字符串標記的向量之間的一些點積。 我的想法是聲明類似下面的內容,其中變量參數列表包含字符串文字。 如果變量參數列表為空,那么我將在標准標簽之間進行查找並執行計算。 如果用戶指定了兩個標簽,我會檢索這兩個向量並得到它們的點積:
extern "C" void compute_dot_product(double * dot_product, ...)
{
va_list args;
va_start(args, NULL);
char * label1 = va_arg(args, char *);
if (!label1)
{
// Do standard label lookup and compute dot product
}
else
{
// Compute dot product between the vectors with the specified labels
char * label2 = va_arg(args, char *);
}
va_end(args);
}
唯一的問題是我可以編譯我的C庫並將其鏈接到Fortran可執行文件,但是當我嘗試訪問變量參數列表時,我收到運行時錯誤。 知道我想做什么是可能的嗎? 一個可能的解決方案是分成兩個函數:一個執行標准標簽查找(0參數情況),另一個執行非標准標簽查找(2參數情況)。 我寧願避免這個解決方案。
無法以標准符合(即便攜式)方式調用可變參數函數。
您可以使C函數的定義僅采用兩個參數(因此它不再是可變參數 - 對函數的現有引用需要修改),C函數中的第二個參數是一個指針,或者為NULL以指示那里沒有額外的東西被傳遞,或指向一個指針數組(可能是NULL終止)或任何其他東西。 在F201X中,這種函數的接口體可能能夠使用OPTIONAL屬性作為第二個參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.