error : declared as function returning an array in c (mpfr libary)
error : declared as function returning an array in c (mpfr libary)
我是 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;
}
怎么了??
mpfr_t
,就像任何其他数组类型一样,cannot be used作为return值类型;参见#1592。
要return一个mpfr_t
值,请遵循所有MPFR函数使用的约定,通过一个函数参数return它。
您的代码中还有一个错误:mpfr_get()
应该 return int
(按照惯例;实际上还没有在 MPFR 文档中找到这样的函数),而不是mpfr_t
,见上文。
与 GMP 类型一样,mpfr_t
是一个大小为 1 的数组(元素是一个结构,但您实际上不需要知道这一点)。如果您决定编写一个 returns MPFR 数字的函数,您有 2 种可能性(以及其他):
- 调用者以给定的精度分配和初始化
mpfr_t
。在这种情况下,mpfr_t
应该作为函数的参数,而 this 是指向实际传递的数组的指针(根据 C 语言的规则)。基本上,这可以看作是传递变量by reference。 MPFR 函数使用此方法。
- 调用者没有分配任何东西。函数的原型应该是函数 returns 指向结构的指针
mpfr_ptr
。所以,这个函数通常会用malloc
分配mpfr_t
(这样当函数returns时内存不会被释放),然后用mpfr_init2
初始化结构。精度可以由此函数选择或作为参数传递。
注意:你的程序有很多错别字,但我想这不是这个问题的重点。
我是 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;
}
怎么了??
mpfr_t
,就像任何其他数组类型一样,cannot be used作为return值类型;参见#1592。
要return一个mpfr_t
值,请遵循所有MPFR函数使用的约定,通过一个函数参数return它。
您的代码中还有一个错误:mpfr_get()
应该 return int
(按照惯例;实际上还没有在 MPFR 文档中找到这样的函数),而不是mpfr_t
,见上文。
与 GMP 类型一样,mpfr_t
是一个大小为 1 的数组(元素是一个结构,但您实际上不需要知道这一点)。如果您决定编写一个 returns MPFR 数字的函数,您有 2 种可能性(以及其他):
- 调用者以给定的精度分配和初始化
mpfr_t
。在这种情况下,mpfr_t
应该作为函数的参数,而 this 是指向实际传递的数组的指针(根据 C 语言的规则)。基本上,这可以看作是传递变量by reference。 MPFR 函数使用此方法。 - 调用者没有分配任何东西。函数的原型应该是函数 returns 指向结构的指针
mpfr_ptr
。所以,这个函数通常会用malloc
分配mpfr_t
(这样当函数returns时内存不会被释放),然后用mpfr_init2
初始化结构。精度可以由此函数选择或作为参数传递。
注意:你的程序有很多错别字,但我想这不是这个问题的重点。