为什么 XS subs 使用 const char *?
Why do XS subs use const char *?
很多 Perl XS 代码使用 const char *
作为 XS sub 的 return 值,但绝不仅仅是 char *
。例如:
const char *
version(...)
CODE:
RETVAL = chromaprint_get_version();
OUTPUT: RETVAL
代码来自 xs-fun
有人可以解释为什么 const
是首选吗?在我的测试中,无论是否使用 const
,returned 标量都是可修改的。
这只是为了清楚起见。 chromaprint_get_version
函数 return 是 const char *
,因此 XSUB 也应定义为 const char *
return 类型。如果您查看 built-in typemap,使用 const char *
、char *
甚至 unsigned char *
都没有区别。他们都使用 T_PV
类型映射。在所有情况下,XSUB 都会 return 包含 C 字符串副本的 SV,它始终是可修改的。
很多 Perl XS 代码使用 const char *
作为 XS sub 的 return 值,但绝不仅仅是 char *
。例如:
const char *
version(...)
CODE:
RETVAL = chromaprint_get_version();
OUTPUT: RETVAL
代码来自 xs-fun
有人可以解释为什么 const
是首选吗?在我的测试中,无论是否使用 const
,returned 标量都是可修改的。
这只是为了清楚起见。 chromaprint_get_version
函数 return 是 const char *
,因此 XSUB 也应定义为 const char *
return 类型。如果您查看 built-in typemap,使用 const char *
、char *
甚至 unsigned char *
都没有区别。他们都使用 T_PV
类型映射。在所有情况下,XSUB 都会 return 包含 C 字符串副本的 SV,它始终是可修改的。