为什么XS subs使用const char *?

时间:2016-06-01 23:29:56

标签: perl xs

许多Perl XS代码使用const char *作为XS sub的返回值,但不仅仅是char *。例如:

const char *
version(...)
    CODE:
        RETVAL = chromaprint_get_version();
    OUTPUT: RETVAL
来自xs-fun

代码

有人可以解释为什么const是首选的吗?在我的测试中,无论是否使用const,返回的标量都是可修改的。

1 个答案:

答案 0 :(得分:8)

只是为了清楚起见。 chromaprint_get_version函数返回const char *,因此XSUB也应定义为const char *返回类型。如果您查看built-in typemap,那么无论您使用const char *char *还是unsigned char *,都无济于事。它们都使用T_PV类型映射。在所有情况下,XSUB都将返回一个包含C字符串副本的SV,该字符串始终可以修改。