さて、今度は、先の例を改造して、2 つの引数の和と差の両方を返すようにして みましょう。
Perl sub は
sub AddSubtract
{
my($a, $b) = @_ ;
($a+$b, $a-$b) ;
}
のようになり、C 関数は
static void
call_AddSubtract(a, b)
int a ;
int b ;
{
dSP ;
int count ;
ENTER ;
SAVETMPS;
PUSHMARK(sp) ;
XPUSHs(sv_2mortal(newSViv(a)));
XPUSHs(sv_2mortal(newSViv(b)));
PUTBACK ;
count = perl_call_pv("AddSubtract", G_ARRAY);
SPAGAIN ;
if (count != 2)
croak("Big trouble\n") ;
printf ("%d - %d = %d\n", a, b, POPi) ;
printf ("%d + %d = %d\n", a, b, POPi) ;
PUTBACK ;
FREETMPS ;
LEAVE ;
}
となります。
注意点
G_ARRAY を使用します。
POPi を使ってい
ることは、驚くに値しないでしょう。それよりも、注目すべきは、スタックから
取り出したときに逆順となることです。
reverse order.
Go to the first, previous, next, last section, table of contents.