1

我刚刚开始使用 GMP 和 MPFR。我正在用 C 语言编写一个程序,并希望创建一个函数,该函数(例如)将 mpfr_t 变量作为输入并返回一个 mpfr_t 变量。我不确定 mpfr_t 的定义,但我天真地尝试这样做并得到编译错误。

任何有关此的信息将不胜感激。

4

2 回答 2

2

mpfr_t is a type, and it's an opaque type, meaning you're not supposed to know its definition. You should be able to just define a function

mpfr_t f(mpfr_t x)
{
    // ...
}

as long as whatever's in the ... only performs valid operations (such as MPFR library functions) on x.

If that doesn't work, you should post the error you're getting.

于 2011-04-20T17:16:28.483 回答
0

该类型大多是不透明的,但文档确实提供了一些有用的信息。

特别是,它是[1]一个struct类型的数组。这告诉我们您不需要调用分配函数来创建分配函数。创建变量会创建存储,您可以创建自动或静态变量,并且您知道它们所在的位置。

确实需要调用mpz_init()函数来对其进行初始化,但作为数组类型,它会衰减到函数调用的参数列表中的指针。这意味着简单地传递变量(不带&)意味着函数可以修改该存储。因此,(仅)注意const函数原型中的声明很重要。在所有情况下,它都是没有目的地const那个。

作为数组类型也意味着您不能通过mpz_t简单的赋值来复制值,而是memcpy或类似。因为您不能通过赋值复制数组。

于 2016-06-03T04:29:10.597 回答