7

有没有办法声明一个 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 参数情况)。我宁愿避免这种解决方案。

4

1 回答 1

4

不可能以符合标准(即可移植)的方式调用可变参数函数。

您可以使 C 函数的定义仅采用两个参数(因此它不再是可变参数 - 需要修改对该函数的现有引用),C 函数中的第二个参数是一个指针,NULL 表示存在没有传递额外的东西,或者指向一个指针数组(可能是 NULL 终止)或其他任何东西,还有任何额外的东西。在 F201X 中,此类函数的接口主体可能能够将 OPTIONAL 属性用于第二个参数。

于 2013-10-30T03:43:54.470 回答