我试图创建一个返回类型为mpfr_t的函数,但我的声明中出现错误。头文件声明看起来像(mpfr.h是本地的):
#include "include/mpfr.h"
mpfr_t calcWinProb(int x);
但是当我尝试编译时,我收到以下错误:
error: âcalcWinProbâ declared as function returning an array
有什么想法吗?
答案 0 :(得分:3)
C语言不允许数组作为返回类型,mpfr_t
肯定是:
typedef __mpfr_struct mpfr_t[1];
参考N1570(C11草案)6.7.6.3/1
函数声明符(包括原型):
函数声明符不应指定a的返回类型 函数类型或数组类型。
这违反了约束条件,因此您的编译器有义务进行诊断(例如编译错误)。
你可能会做的就是将mpfr_t
替换为mpfr_ptr
(指向struct的指针)类型或重新设计你的声明,因此mpfr_t
是参数之一(可能是第一个)而不是那种返回类型,在这种情况下可能是void
。后一种解决方案似乎与MPFR API更加一致。
答案 1 :(得分:0)
我不是专家,但我所做的是创建一个函数,该函数将指向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;
}