我正在尝试创建一个返回类型 mpfr_t 的函数,但在其声明中出现错误。头文件声明看起来像(mpfr.h 是本地的):
#include "include/mpfr.h"
mpfr_t calcWinProb(int x);
但是当我尝试编译时,出现以下错误:
error: âcalcWinProbâ declared as function returning an array
有任何想法吗?
C 语言不允许数组作为返回类型,这mpfr_t
肯定是:
typedef __mpfr_struct mpfr_t[1];
参考 N1570(C11 草案)6.7.6.3/1
函数声明器(包括原型):
函数声明器不应指定函数类型或数组类型的返回类型。
这是违反约束的,因此您的编译器有义务进行诊断(例如编译错误)。
您可能会做的事情是mpfr_t
用mpfr_ptr
(指向结构的指针)类型替换或重新设计您的声明,mpfr_t
参数之一(可能是第一个)也是如此,而不是返回类型,这可能是void
在这种情况下。后一种解决方案似乎与MPFR API更一致。
我不是专家,但我所做的是创建一个函数,该函数将指向 mpfr_t 的指针作为参数,因此您可以在那里返回值。例如:
#include <stdio.h>
#include <mpfr.h>
void return_one(mpfr_t *num) {
mpfr_set_ui(*num,1,MPFR_RNDN);
}
int main() {
mpfr_t num;
mpfr_init2(num,512);
return_one(&num);
mpfr_printf("%.5Rf\n",num);
mpfr_clear(num);
return 0;
}