2016-06-01 24 views
8

Çok sayıda Perl XS kodu, bir XS alt öğesinin dönüş değeri olarak const char *'u kullanır, ancak hiçbir zaman yalnızca char *'u kullanır. Örneğin: const neden tercih edilirXS subs neden const char * kullanıyor?

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

xs-fun kod

Birisi açıklayabilir misiniz? Benim testimde, geri dönen skaler, const'un kullanılıp kullanılmayacağını değiştirebilir.

cevap

8

Sadece açıklık içindir. chromaprint_get_version işlevi bir const char * döndürür, bu nedenle XSUB bir const char * dönüş türü ile tanımlanmalıdır. built-in typemap'a bir bakışınız varsa, const char *, char *, hatta unsigned char *'u kullanmanız fark etmez. Hepsi T_PV tipini kullanır. Her durumda, XSUB, her zaman değiştirilebilir olan C dizesinin bir kopyasını içeren bir SV döndürecektir.