translate a macro to D
Steven Schveighoffer
schveiguy at yahoo.com
Fri Jul 8 06:54:40 PDT 2011
On Thu, 07 Jul 2011 16:23:33 -0400, teo <teo.ubuntu at yahoo.com> wrote:
> On Thu, 07 Jul 2011 11:57:51 -0400, Steven Schveighoffer wrote:
>
>> Well, I can't really say I understand the point of using this macro at
>> all. sizeof is a builtin, and part of the C spec. Why not just use
>> sizeof?
>>
>
> Well, have a look please at ioctl.h (linux). You will find the following
> macros:
>
>
> #define _IOC(dir,type,nr,size) \
> (((dir) << _IOC_DIRSHIFT) | \
> ((type) << _IOC_TYPESHIFT) | \
> ((nr) << _IOC_NRSHIFT) | \
> ((size) << _IOC_SIZESHIFT))
>
> #define _IOC_TYPECHECK(t) (sizeof(t))
>
> /* used to create numbers */
> #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
> #define _IOR(type,nr,size)
> _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK
> (size)))
> #define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),
> (_IOC_TYPECHECK(size)))
> #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),
> (_IOC_TYPECHECK(size)))
>
>
> This is what I am after. However I thought that a simplified case will
> make it easier to describe the problem.
>
Hm... I once wrote a D module that accessed a linux device driver (ipmi
driver to be specific). I did it in D1, and I used CTFE. For sure,
t.sizeof should work instead of _IOC_TYPECHECK. But Linux supports a
multitude of CPUs, perhaps other CPUs need a different macro for this.
It's the only thing I can think of to explain having a specific macro to
do sizeof.
-Steve
More information about the Digitalmars-d-learn
mailing list