2

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

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

但是当我尝试编译时,出现以下错误:

error: âcalcWinProbâ declared as function returning an array

有任何想法吗?

4

2 回答 2

3

C 语言不允许数组作为返回类型,这mpfr_t肯定是:

typedef __mpfr_struct mpfr_t[1];

参考 N1570(C11 草案)6.7.6.3/1 函数声明器(包括原型)

函数声明器不应指定函数类型或数组类型的返回类型。

这是违反约束的,因此您的编译器有义务进行诊断(例如编译错误)。

您可能会做的事情是mpfr_tmpfr_ptr(指向结构的指针)类型替换或重新设计您的声明,mpfr_t参数之一(可能是第一个)也是如此,而不是返回类型,这可能是void在这种情况下。后一种解决方案似乎与MPFR API更一致。

于 2014-12-17T22:48:42.883 回答
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;
}
于 2015-08-03T12:51:27.840 回答