Le 23/12/2014 14:02, jcup...@gmail.com a écrit :
>>>>> I'm looking for the rational of using 'gint' instead of 'guint' in the
>>>>> call:
>>>>>
>>>>> g_ptr_array_set_size (GPtrArray *array, gint length);
>>>
>>>>
>>>> I imagine that the use of a signed integer was an oversight at the time
>>>> which can now not be corrected without breaking API. It's not worth
>>>> that.
>>>
> 
> I remember (a long, long time ago) there was a dislike for uint.
> Mixing uint and int can be fiddly and produce a range of bugs, some
> more subtle than others, and the extra bit of range you get is
> unimportant. int-only code is usually simpler and safer.

It's far from being that simple.  There is for example a whole history
of out of bound buffer access triggered by signed integer wraparound [1]
and missing checks for < 0.  With unsigned you can't suffer from this
(directly).  But OK, unsigned integer "overflow" can also lead to
infinite loops or under-allocations in some special cases.

But well, this is C, it's a tricky language.  But IMO, yes, unsigned has
a lot of benefits when it comes to sizes, and is overall safer than the
signed version.  And in the large majority of cases, a correctly
designed code that always uses unsigned sizes won't suffer from mixed
signedness.

size_t (or gsize) TFW :)

Colomban


[1] as while signed integer overflow is technically undefined behavior
(which is bad enough), it generally ends up in a wraparound to MIN_INT
due to the machine integer representation.
_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-devel-list

Reply via email to