error:声明为函数返回c中的数组(mpfr libary)

时间:2016-10-19 16:31:26

标签: c mpfr

我是mpfr的初学者,我编写了这个程序来进行特定的计算并按照你的意思得到它,但我不知道为什么会出现这个错误,这是我最重要的代码:

mpfr_t  myfct(int n)

{
   /......./
        return mpfr_get(result,MPFR_RNDN);

}

int main(void)
{

    mpfr_t U;
    mpfr_set_default_prec (53); 

    mpfr_set_emin (-1073);
    mpfr_set_emax (1024);

    n=10;
    mpfr_init2(U,24);
    mpfr_get(U,my_fct(n),MPFR_RNDN);
    mpfr_printf ("result: %.40Rg\n", U);

    mpfr_clear(U);

    return 0;
}

怎么了?

2 个答案:

答案 0 :(得分:1)

与GMP类型一样,mpfr_t是一个大小为1的数组(元素是一个结构,但你真的不需要知道它)。如果您决定编写一个返回MPFR编号的函数,您有两种可能性(其中包括):

  1. 调用者以一定的精度分配和调用mpfr_t。在这种情况下,mpfr_t应该作为函数的参数,这是一个指向实际传递的数组的指针(根据C语言的规则)。基本上,这可以看作是传递变量by reference。 MPFR函数使用此方法。
  2. 来电者不分配任何东西。函数的原型应该是函数向结构返回一个指针mpfr_ptr。因此,此函数将通常使用mpfr_t分配malloc(以便在函数返回时不释放内存),然后使用mpfr_init2初始化结构。精度可以通过此函数选择或作为参数传递。
  3. 注意:你的程序有各种错别字,但我想这不是这个问题的重点。

答案 1 :(得分:0)

mpfr_t,就像任何其他数组类型一样,cannot be used作为返回值类型;见#1592。

要返回mpfr_t值,请遵循所有MPFR函数使用的约定,并通过函数参数返回。

您的代码中还有一个错误:mpfr_get()应该返回int(根据惯例;实际上并未在MPFR文档中找到此类函数),而不是mpfr_t,见上文。