从Perl XS代码,我如何递归调用自己?

the*_*jxc 7 perl xs

我在Pure Perl中有一个复杂的编码功能,我正在转换为XS,希望获得性能提升.

我转换为XS的函数需要以递归方式调用自身.我可以看到如何使用call_sv [感谢"man perlcall"]来调用Pure Perl函数.

但是我如何在XS中称自己(或任何其他XS功能)呢?

(PS效率非常理想...)

有人可以给我一个提示吗?还是一个例子?PPP-请!

更新:第一个答案是绝对正确的.调用递归纯C函数可以正常工作.

ike*_*ami 9

别.XS是一种为C函数提供Perl接口的机制.不要从C函数中调用XS函数(您要使用的函数call_sv等); 从XS函数调用C函数.

编写递归C函数并将其保留在XS代码之外(MODULE =在行之前或单独处理.c).从瘦XS包装器中调用它.

  • @ the.jxc:没问题,你可以使用C函数中的`croak`.就个人而言,我喜欢使用`THX`宏集明确地传递perl上下文,然后将`croak`称为`perl_croak(aTHX_ format,...)`,但我认为只是调用`croak(fmt,.. .)`也应该工作. (2认同)