理系学生日記

おまえはいつまで学生気分なのか

RETVAL てなんだ

XSUB に頻繁にでてくる RETVAL ってなんなんだろう.

perlxs によると,XSUB の戻り値が non-void のときに xsubpp が自動生成する(C の)変数ということです.確かに,これまで書いてきた XSUB を C ソースに変換した結果をみると,RETVAL が宣言されています.RETVAL の型も XSUB の戻り値になってますね.

XS(XS_String_strlen)
{
    dXSARGS;
    if (items != 1)
        Perl_croak(aTHX_ "Usage: String::strlen(s)");
    {
        size_t  RETVAL;
        dXSTARG;
        const char *    s = (const char *)SvPV_nolen(ST(0));
#line 13 "String.xs"
        RETVAL = strlen(s);
#line 32 "String.c"
        XSprePUSH; PUSHu((UV)RETVAL);
    }
    XSRETURN(1);
}