Skip to contentSkip to conversation

Difference between INIT_LIST_HEAD and LIST_HEAD_INIT

DISCUSSION nawab 5 participants 5 messages Jan 6, 2015

lore
Share & tools
lore

nawab

author
#0 lore raw

hi friends ,

i have a simple doubt when i was looking on linux/list.h

I have seen that INIT_LIST_HEAD and LIST_HEAD_INIT are performing the
same functionality,the major difference is
the argument passed.

When we have to use INIT_LIST_HEAD and LIST_HEAD_INIT??

#1 lore raw
Quoted 9 lines · nawab

hi friends ,

i have a simple doubt when i was looking on linux/list.h

I have seen that INIT_LIST_HEAD and LIST_HEAD_INIT are performing the
same functionality,the major difference is
the argument passed.

When we have to use INIT_LIST_HEAD and LIST_HEAD_INIT??

At the risk of sounding snarky - you use INIT_LIST_HEAD when you have an argument of the type it takes, and you use LIST_INIT_HEAD when you have something of the type that *that* one takes. Just like math.h gives us:

       double sin(double x);
       float sinf(float x);

so if you have a float, you call sinf() and if you have a double, you call sin().

(Hint: One looks suspiciously like a data initializer, the other looks like executable code.... :)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 848 bytes
Desc: not available
Url : http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20150106/109fc439/attachment.bin

#2 lore raw
Quoted 3 lines
Quoted 2 lines

When we have to use INIT_LIST_HEAD and LIST_HEAD_INIT??

I believe it's better to use macro LIST_HEAD(name) to define and initialize a variable of type 'struct list_head'.

The method INIT_LIST_HEAD() is used to initialize a predefined variable of type 'struct list_head'.

Signature · 2 lines
Best regards,
Chen Weixiang (Alex)
#3 lore raw
In reply to nawab
Quoted 8 lines · nawab

hi friends ,

i have a simple doubt when i was looking on linux/list.h

I have seen that INIT_LIST_HEAD and LIST_HEAD_INIT are performing the
same functionality,the major difference is
the argument passed.

yes but that is minor difference. Major is that one is a macro and other is a function.

Quoted 2 lines

When we have to use INIT_LIST_HEAD and LIST_HEAD_INIT??

When do you use macro and when do you use function?

Quoted 6 lines

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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20150106/d9c54d49/attachment.html

#4 lore raw
Quoted 17 lines · anish singh

On Tue, Jan 6, 2015 at 1:37 AM, nawab <[email protected]> wrote:

hi friends ,

i have a simple doubt when i was looking on linux/list.h

I have seen that? ?INIT_LIST_HEAD and LIST_HEAD_INIT are performing the same functionality,the major difference is
the argument passed.

?
yes but that is minor difference. Major is that one is a macro and other is a function.
?

Quoted 4 lines

When we have to use INIT_LIST_HEAD and LIST_HEAD_INIT??

When do you use macro and when do you use function?

It depends on your need. Look at how the two are used in the kernel, we have thousands of examples. Seeing them should explain more than what we can here.

Or, try it out yourself, write a tiny module using a list and see how the different functions and macros work.

good luck,

greg k-h