很多Perl XS代码使用const char *
作为XS子的返回值,但从来不只是char *
。例如:
const char *
version(...)
CODE:
RETVAL = chromaprint_get_version();
OUTPUT: RETVAL
来自XS-Fun的代码
有人可以解释为什么首选const
吗?在我的测试中,无论是否使用const
,返回的标量都是可修改的。
这只是为了清楚起见。chromaprint_get_version
函数返回一个const char *
,所以XSUB也应该用const char *
返回类型来定义。如果你看一下内置的typemap,无论你使用const char *
、char *
,甚至unsigned char *
都没有区别。它们都使用 T_PV
类型映射。在所有情况下,XSUB 将返回一个包含 C 字符串副本的 SV,该副本始终是可修改的。