2016-06-01 14 views
8

Rất nhiều mã Perl XS sử dụng const char * làm giá trị trả lại của một phụ XS nhưng không bao giờ chỉ char *. Ví dụ:Tại sao XS subs sử dụng const char *?

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

mã từ xs-fun

Có thể ai đó giải thích tại sao const được ưa thích? Trong thử nghiệm của tôi, vô hướng quay trở lại có thể sửa đổi được liệu const có được sử dụng hay không.

Trả lời

8

Chỉ để làm rõ. Hàm chromaprint_get_version trả về một số const char *, vì vậy XSUB phải được xác định bằng loại trả về const char *. Nếu bạn có một cái nhìn tại các built-in typemap, nó không làm cho một sự khác biệt cho dù bạn sử dụng const char *, char *, hoặc thậm chí unsigned char *. Tất cả đều sử dụng phông chữ T_PV. Trong mọi trường hợp, XSUB sẽ trả về SV có chứa một bản sao của chuỗi C, luôn luôn có thể sửa đổi được.

Các vấn đề liên quan