为什么 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,它始终是可修改的。