C可変関数を宣言してFortranから呼び出す方法はありますか? 文字列でラベル付けされたベクトル間のドット積を計算するには、この関数を呼び出す必要があります。 私の考えは、引数の変数リストに文字列リテラルが含まれている次のようなものを宣言することでした。変数の変数リストが空の場合、標準のラベルの中から検索を行い、計算を実行します。ユーザーが2つのラベルを指定した場合、私は、これらの二つのベクトルを取得し、そのドット積になるだろう。唯一の問題は、私は私のCライブラリをコンパイルし、Fortranの実行ファイルにリンクできることですC可変関数と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);
}
を、私はランタイムエラーを取得します私は引数の変数リストにアクセスしようとするとき。 私がしようとしていることがあれば、どんな考えができますか? 次に、標準ラベル検索(0引数の場合)と非標準ラベル参照(2引数の場合)を処理する関数の2つの関数に分割する方法が考えられます。私はむしろこの解決策を避けるだろう。
両側でcdeclとして宣言する必要があります。片側がstdcallで、もう片方がcdeclであるため、ランタイムエラーが発生する可能性があります。 – cup