许多Perl XS代码使用const char *
作为XS sub的返回值,但不仅仅是char *
。例如:
const char *
version(...)
CODE:
RETVAL = chromaprint_get_version();
OUTPUT: RETVAL
来自xs-fun 的代码
有人可以解释为什么const
是首选的吗?在我的测试中,无论是否使用const
,返回的标量都是可修改的。
答案 0 :(得分:8)
只是为了清楚起见。 chromaprint_get_version
函数返回const char *
,因此XSUB也应定义为const char *
返回类型。如果您查看built-in typemap,那么无论您使用const char *
,char *
还是unsigned char *
,都无济于事。它们都使用T_PV
类型映射。在所有情况下,XSUB都将返回一个包含C字符串副本的SV,该字符串始终可以修改。