, mpz_t typedef'ed :
typedef __mpz_struct mpz_t[1];
mpz_t :
mpz_t a, b;
mpz_init(b);
a = b;
:
mpz_t a, b;
mpz_inits(a, b, 0);
mpz_set(a, b);
mpz_t - , gmp . . 1 .
Bison , YYSTYPE (. 2), , . , YYSTYPE , . , bison , %union.
gmp, , , . , , , , gmp ( , free - mpz_t)..
mpz_t , . , , ; , mpz_clear ed, .
( ) , mpz_t. bignum, . , .
mpz_t, , :
1. GMP
gmp mpz_t ( ) 1 C- . , pass-by-reference . , , - , mpz_t. - , gmp .
Gmp . (, , .) , :
, , Java ++ . , :
.
Gmp . Bignums , C , , .
, - , - gmp . , gmp, , , union memcpy(), gmp , :
mpz_t.
, gmp bignum, realloc. , a b mpz_t, , , :
memcpy(a, b, sizeof(a));
b :
mpz_mul(b, b, b);
, -
tmp = realloc(b->_mp_d, 2 * b->_mp_size);
if (tmp) b->_mp_d = tmp;
b , . b, , a, , realloc, , .
, b; . a , b: mpz_add(b, tmp1, tmp2); ( tmp1 / tmp2 , b.)
2. ,
Bison YYSTYPE ; , $$ . $$ = $1;. , , $1 $n , $$. , $1 $$, . ( $$ $1.)