bob*_*rto 7 c fortran fortran90 fortran-iso-c-binding
有没有办法声明一个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);
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我可以编译我的C库并将其链接到Fortran可执行文件,但是当我尝试访问变量参数列表时,我收到运行时错误.知道我想做什么是可能的吗?一个可能的解决方案是分成两个函数:一个执行标准标签查找(0参数情况),另一个执行非标准标签查找(2参数情况).我宁愿避免这个解决方案.
不可能以符合标准(即可移植)的方式调用可变参数函数。
您可以使 C 函数的定义仅采用两个参数(因此它不再是可变参数 - 需要修改对该函数的现有引用),C 函数中的第二个参数是一个指针,可以为 NULL 来指示存在没有传递任何额外的东西,或者指向一个指针数组(可能以 NULL 终止)或任何其他东西。在 F201X 中,此类函数的接口体可能能够使用第二个参数的 OPTIONAL 属性。