mpfr_t的类型是什么,我如何制作这种类型的C函数?

时间:2011-04-20 17:00:08

标签: c gmp mpfr

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

非常感谢有关此事的任何信息。

2 个答案:

答案 0 :(得分:3)

mpfr_t 一种类型,它是一种不透明的类型,这意味着你不应该知道它的定义。您应该只能定义一个函数

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

只要...中的任何内容仅在x上执行有效操作(例如MPFR库函数)。

如果这不起作用,您应该发布您正在收到的错误。

答案 1 :(得分:0)

该类型大部分是不透明的,但documentation确实提供了一些有用的信息。

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

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

作为数组类型也意味着您无法使用简单赋值复制mpz_t值,而是memcpy或类似值。因为您无法通过分配来复制数组。