【问题标题】:Why do XS subs use const char *?为什么 XS 潜艇使用 const char *?
【发布时间】:2016-06-01 23:29:56
【问题描述】:

很多 Perl XS 代码使用 const char * 作为 XS 子程序的返回值,但从不只使用 char *。例如:

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

来自xs-fun的代码

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

【问题讨论】:

    标签: perl xs


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多