7

C 可変引数関数を宣言して Fortran から呼び出す方法はありますか? この関数を呼び出して、文字列でラベル付けされたベクトル間の内積を計算する必要があります。私の考えは、引数の変数リストに文字列リテラルが含まれている次のようなものを宣言することでした。引数の変数リストが空の場合、標準ラベルを検索して計算を実行します。ユーザーが 2 つのラベルを指定した場合、それらの 2 つのベクトルを取得して内積を取得します。

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 実行可能ファイルにリンクできることですが、引数の変数リストにアクセスしようとすると実行時エラーが発生します。私がやろうとしていることは可能ですか?考えられる解決策は、2 つの関数に分割することです。1 つは標準のラベル検索 (引数が 0 の場合) を行い、もう 1 つは非標準のラベル検索 (引数が 2 つの場合) を処理します。ただし、このソリューションは避けたいと思います。

4

1 に答える 1