mpfr_t函数声明错误

时间:2014-12-17 22:25:02

标签: c mpfr

我试图创建一个返回类型为mpfr_t的函数,但我的声明中出现错误。头文件声明看起来像(mpfr.h是本地的):

#include "include/mpfr.h"
mpfr_t calcWinProb(int x);

但是当我尝试编译时,我收到以下错误:

error: âcalcWinProbâ declared as function returning an array

有什么想法吗?

2 个答案:

答案 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;
}
相关问题