title: NULL definition in stddef.h
body: <p>I found two same name  header files in my computer with different content:</p>
  <pre><code>/usr/src/linux-headers-4.19.0-13-common/include/uapi/linux/stddef.h
  /usr/src/linux-headers-4.19.0-13-common/include/linux/stddef.h
  </code></pre>
  <p>Why these files are in different folders and has different content?</p>
  <p>Which folder with headers I should use when I create C++ applications?</p>
  <p>First file:
  /usr/src/linux-headers-4.19.0-13-common/include/uapi/linux/stddef.h</p>
  <p>Content:</p>
  <pre><code>#ifndef _LINUX_STDDEF_H
  #define _LINUX_STDDEF_H
  
  #include &lt;uapi/linux/stddef.h&gt;
  
  #undef NULL
  #define NULL ((void *)0)
  
  enum {
      false   = 0,
      true    = 1
  };
  
  #undef offsetof
  #ifdef __compiler_offsetof
  #define offsetof(TYPE, MEMBER)  __compiler_offsetof(TYPE, MEMBER)
  #else
  #define offsetof(TYPE, MEMBER)  ((size_t)&amp;((TYPE *)0)-&gt;MEMBER)
  #endif
  
  /**
   * sizeof_field(TYPE, MEMBER)
   *
   * @TYPE: The structure containing the field of interest
   * @MEMBER: The field to return the size of
   */
  #define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)-&gt;MEMBER))
  
  /**
   * offsetofend(TYPE, MEMBER)
   *
   * @TYPE: The type of the structure
   * @MEMBER: The member within the structure to get the end offset of
   */
  #define offsetofend(TYPE, MEMBER) \
      (offsetof(TYPE, MEMBER) + sizeof_field(TYPE, MEMBER))
  
  #endif
  </code></pre>
  <p>Second file:</p>
  <pre><code>/usr/src/linux-headers-4.19.0-13-common/include/linux/stddef.h
  </code></pre>
  <p>Content:</p>
  <pre><code>/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  #include &lt;linux/compiler_types.h&gt;
  
  #ifndef __always_inline
  #define __always_inline inline
  #endif
  </code></pre>