2016-06-01 1 views
8

Un grand nombre de codes Perl XS utilise const char * comme valeur de retour d'un sous-système XS mais jamais simplement char *. Par exemple:Pourquoi les sous-marins XS utilisent-ils const char *?

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

de xs-fun

Quelqu'un peut-il expliquer pourquoi const est préféré? Dans mes tests, le scalaire renvoyé est modifiable, que le const soit utilisé ou non.

Répondre

8

C'est uniquement pour plus de clarté. La fonction chromaprint_get_version renvoie un const char *, de sorte que le XSUB doit également être défini avec un type de retour const char *. Si vous regardez le built-in typemap, cela ne fait aucune différence que vous utilisiez const char *, char * ou même unsigned char *. Ils utilisent tous le T_PV typemap. Dans tous les cas, le XSUB retournera un SV contenant une copie de la chaîne C, qui est toujours modifiable.