GMP:是否禁止自我分配?

GMP: Are self-assignments forbidden?

我在 C 中使用 GMP 库实现任意精度。我看到的所有使用示例似乎都避免了自我赋值,例如:

Syntax : void mpz_add (mpz_t rop, const mpz_t op1, const mpz_t op2)

mpz_add(a, a, b); // Assign a+b to a

是否允许这种用法,或者我应该只求助于分配给第三个变量?

这样的自我赋值并没有错。事实上,documentation 的说法恰恰相反。根据 3.4 变量约定:

GMP lets you use the same variable for both input and output in one call. For example, the main function for integer multiplication, mpz_mul, can be used to square x and put the result back in x with

 mpz_mul (x, x, x);