[Python-Dev] Const-correctness in C-API Object Protocol

Eric Smith eric at trueblade.com
Tue Feb 22 20:09:56 CET 2011


On 02/22/2011 01:55 PM, Brett Cannon wrote:
>
>
> On Mon, Feb 21, 2011 at 15:34, David Claridge <daave at daave.com
> <mailto:daave at daave.com>> wrote:
>
>     Hi,
>
>     I was wondering if there is some reason why C API functions like
>     PyObject_CallMethod[1] and PySys_GetObject[2] take char* arguments
>     rather than const char*s? If there is some reason these methods will
>     modify their string arguments, it would be nice if it was documented,
>     because at the moment it's unclear whether it is safe to cast a string
>     literal to char* in these cases. For instance it seems reasonable that
>     I should be able to call PySys_GetObject("path") without having to
>     deal with a 'deprecated conversion from string constant to ‘char*’'
>     error.
>
>
> Probably because (a) the person who first wrote them used char* instead
> of const char*, and (b) it gives us API flexibility by not promising to
> not alter the char array at some point in the future.

Also changing it now would be a giant hassle, leading to so-called 
"const poisoning" where many, many APIs need to be changed before 
everything would again work.


More information about the Python-Dev mailing list