さて、今度は、先の例を改造して、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.