8

许多 Perl XS 代码使用const char *XS 子程序的返回值,但从不只是char *. 例如:

const char *
version(...)
    CODE:
        RETVAL = chromaprint_get_version();
    OUTPUT: RETVAL

来自xs-fun 的代码

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

4

1 回答 1

8

这只是为了清楚。该chromaprint_get_version函数返回 a const char *,因此 XSUB 也应该使用const char *返回类型来定义。如果您查看内置的 typemapconst char * ,无论您使用,char *还是, 都没有区别unsigned char *。他们都使用T_PV类型映射。在所有情况下,XSUB 都将返回一个包含 C 字符串副本的 SV,该副本始终是可修改的。

于 2016-06-02T00:02:13.217 回答