簡體   English   中英

C可變函數與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM