gmp 有理计算库重命名了一些非常奇怪的结构,如
typedef __mpq_struct mpq_t[1];
将结构体定义为长度为1的数组,有几个好处。
1. mpq_t 定义变量的时候直接定义一个结构体和一个指向该结构体的指针。
2. 在函数传参的时候,直接将指针传过去,不需要再建引用。当然c中还没有引用。如果不这样做,需要单独定义一个指针,一个结构体,并将该指针指向该结构体。方便了一点点。
mpq_t需要自己手动释放资源,不然会内存泄漏。如下释放不定参数的mpq_t
void clear_mpq(int n, ...)
{
va_list args;
va_start(args, n);
while (n > 0)
{
mpq_clear(*va_arg(args, mpq_t*));
--n;
}
va_end(args);
}
mpq_t 赋值后需要手动约分。
mpq_canonicalize(one);