[fpc-pascal] Porting C macro

Darius Blaszyk dhkblaszyk at zeelandnet.nl
Tue Mar 12 02:51:33 CET 2013


 

Henry Vermaak schreef op 12 mrt '13: 

> On Mon, Mar 11, 2013 at
11:26:57PM +0100, Darius Blaszyk wrote:
> 
>> I'm stuck porting a macro
from C. Below is the original define. The part I'm struggeling with is
the right most part after the - sign. #define GETNEXT(x) ((LList
*)(((char *) x) - ((char *) & (((LList *)0)^.next))))
> 
> I'm assuming
that the "^." should be "->", in which case the last bit is
> doing the
same as the offsetof() macro. So the macro is subtracting the
> offset
in bytes of the "next" member of the LList struct from x, then
> casting
it to (LList *).
> 
> I'd wager that the GETNEXT() isn't actually doing
what it says, but
> something more like container_of() (because it's
_subtracting_ the
> offset). I may be wrong, though, do you have an
example of its usage?
> 
> Henry
>
_______________________________________________
> fpc-pascal maillist -
fpc-pascal at lists.freepascal.org
>
http://lists.freepascal.org/mailman/listinfo/fpc-pascal [1]

BTW, you
were right. The ^ was indeed a ->, but got replaced in the porting
process.

Regards, Darius 

 

Links:
------
[1]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130312/ac0bfc35/attachment.html>


More information about the fpc-pascal mailing list