Есть ли способ объявить вариативную функцию 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);
}
единственная проблема заключается в том, что я могу скомпилировать свою библиотеку C и связать ее с исполняемым файлом Fortran, но я получаю ошибку времени выполнения, когда пытаюсь получить доступ к списку переменных аргументов. Есть идеи, возможно ли то, что я пытаюсь сделать? Тогда возможным решением было бы разделение на две функции: одна выполняет стандартный поиск метки (с 0 аргументами), другая обрабатывает нестандартный поиск метки (с 2 аргументами). Я бы предпочел избежать этого решения, хотя.