我刚刚开始使用GMP和MPFR。我正在用C编写一个程序,并希望创建一个函数(例如)将mpfr_t变量作为输入并返回一个mpfr_t变量。我不确定mpfr_t的定义,但我天真地尝试这样做并得到编译错误。
非常感谢有关此事的任何信息。
答案 0 :(得分:3)
mpfr_t
是一种类型,它是一种不透明的类型,这意味着你不应该知道它的定义。您应该只能定义一个函数
mpfr_t f(mpfr_t x)
{
// ...
}
只要...
中的任何内容仅在x
上执行有效操作(例如MPFR库函数)。
如果这不起作用,您应该发布您正在收到的错误。
答案 1 :(得分:0)
该类型大部分是不透明的,但documentation确实提供了一些有用的信息。
特别是,它是[1]
类型的数组struct
。这告诉我们您不需要调用分配函数来创建一个。创建变量会创建存储,您可以创建自动或静态变量,并知道它们的存在位置。
你做需要调用mpz_init()
函数来初始化它,但作为一个数组类型,它会衰减到函数调用的参数列表中的指针。这意味着简单地传递变量(没有&
)意味着该函数可以修改该存储。因此,(仅)重要的是要注意函数原型中的const
声明。在所有情况下,它都是没有 const
目的地。
作为数组类型也意味着您无法使用简单赋值复制mpz_t
值,而是memcpy
或类似值。因为您无法通过分配来复制数组。