tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: qsort_r



>>> Is just casting the function pointers safe in C
>> No.  As soon as you call through a pointer to the wrong type you're
>> off in nasal demon territory.
> You can't call through a function pointer of the wrong type, but you
> can cast from one type to another.

True.  I wrote that with more context than the above quote gives.  I
was responding to something I might flesh out as "Is just casting the
function pointers enough to make [the thing under discussion] safe in
C?".

> I think that's enough,

Maybe.  It's possible I misunderstood something; I didn't go through
the whole patch in detail.  But C99 does promise that....

       [#8] A pointer to a function of one type may be converted to
       a pointer to a function of another type and back again;  the
       result  shall  compare  equal to the original pointer.  If a
       converted pointer is used to call a function whose  type  is
       not  compatible  with  the  pointed-to type, the behavior is
       undefined.

(6.3.2.3 in the version I have).

> provided that void * is large enough to be converted to and from a
> function pointer.

I actually don't see anything that promises that a pointer to a
function type may be converted to a pointer to void, nor back again
(except, in each direction, when the original pointer is nil), much
less promising anything about the results if it is done.  But I haven't
read over the whole thing recently enough to be sure there isn't such a
promise hiding somewhere.

/~\ The ASCII                             Mouse
\ / Ribbon Campaign
 X  Against HTML                mouse%rodents-montreal.org@localhost
/ \ Email!           7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B


Home | Main Index | Thread Index | Old Index