我刚刚开始使用 GMP 和 MPFR。我正在用 C 语言编写一个程序,并希望创建一个函数,该函数(例如)将 mpfr_t 变量作为输入并返回一个 mpfr_t 变量。我不确定 mpfr_t 的定义,但我天真地尝试这样做并得到编译错误。
任何有关此的信息将不胜感激。
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.
该类型大多是不透明的,但文档确实提供了一些有用的信息。
特别是,它是[1]
一个struct
类型的数组。这告诉我们您不需要调用分配函数来创建分配函数。创建变量会创建存储,您可以创建自动或静态变量,并且您知道它们所在的位置。
您确实需要调用mpz_init()
函数来对其进行初始化,但作为数组类型,它会衰减到函数调用的参数列表中的指针。这意味着简单地传递变量(不带&
)意味着函数可以修改该存储。因此,(仅)注意const
函数原型中的声明很重要。在所有情况下,它都是没有目的地的const
那个。
作为数组类型也意味着您不能通过mpz_t
简单的赋值来复制值,而是memcpy
或类似。因为您不能通过赋值复制数组。