2016-06-01 11 views
8

Un sacco di codice Perl XS utilizza const char * come valore di ritorno di un sub XS ma mai solo char *. Per esempio:Perché i sottotitoli XS usano const char *?

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

codice xs-fun

Qualcuno può spiegare perché const è preferito? Nei miei test, lo scalare restituito è modificabile se viene utilizzato o meno const.

risposta

8

È solo per chiarezza. La funzione chromaprint_get_version restituisce un const char *, pertanto l'XSUB deve essere definito anche con un tipo di ritorno const char *. Se si dà un'occhiata allo built-in typemap, non fa differenza se si utilizza const char *, char * o unsigned char *. Tutti usano la typemap T_PV. In tutti i casi, l'XSUB restituirà un SV contenente una copia della stringa C, che è sempre modificabile.