Re: Macro explanation

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

 



On Sat, Mar 10, 2012 at 12:10 AM, Manohar Vanga <manohar.vanga@xxxxxxxxx> wrote:
> Also, from the
> archives: http://www.mail-archive.com/kernelnewbies@xxxxxxxxxxxx/msg12320.html

Thank you for links which gives good explanation.
But I am not able to understand the part accessing a member through
NULL pointer like ((size_t) &((TYPE *)0)->MEMBER)
How it is handled?

In C code if we access a member through NULL pointer like this will
cause the code to crash.
Am I missing something?


>
> On Fri, Mar 9, 2012 at 7:21 PM, Vijay Chauhan <kernel.vijay@xxxxxxxxx>
> wrote:
>>
>> Hi,
>>
>> I'm checking the container_of and offsetof macro
>>
>> #define container_of(ptr, type, member) ({ \
>>                const typeof( ((type *)0)->member ) *__mptr = (ptr);
>>                (type *)( (char *)__mptr - offsetof(type,member) );})
>>
>> #define offsetof(TYPE, MEMBER) \
>>  ((size_t) &((TYPE *)0)->MEMBER)
>>
>>
>> I did not understand the first line of both macro. Will it not create
>> the NULL pointer dereference problem? I know it works and read some
>> article but it did not explain this part, so can anyone explain why
>> the NULL pointer error is not coming. Am I missing something?
>> Any C language specification of such example.
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies@xxxxxxxxxxxxxxxxx
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>
>
>
> --
> /manohar

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux