title: C macro expansion in Linux Kernel code
body: <p>I generally have ignored using macros while writing in <strong>C</strong> but I think I know fundamentals about them. While I was reading the source code of list in linux kernel, I saw something like that:</p>
  
  <pre><code>#define LIST_HEAD_INIT(name) { &amp;(name), &amp;(name) }
  #define LIST_HEAD(name) \
      struct list_head name = LIST_HEAD_INIT(name)
  </code></pre>
  
  <p>(You can access the remaining part of the code from <a href="http://www.google.com.tr/codesearch/p?hl=en#KMCRKdMbI4g/include/linux/list.h&amp;q=linux%20list.h&amp;sa=N&amp;cd=2&amp;ct=rc" rel="nofollow noreferrer">here.</a>)</p>
  
  <p>I didn't understand the function of ampersands(I don't think they are the address of operands here) in LIST_HEAD_INIT and so the use of LIST_HEAD_INIT in the code. I'd appreciate if someone can enlighten me.</p>