<!DOCTYPE html>
<html class="client-nojs" lang="ru" dir="ltr"><head>
    <meta charset="UTF-8">
    <title>Stddef.h</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="icon" type="image/png" href="./_res_/favicon.png">
    <link rel="canonical" href="https://ru.wikipedia.org/wiki/Stddef.h"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/skins.vector.styles.legacy.css" rel="stylesheet" type="text/css">
    <meta name="ResourceLoaderDynamicStyles" content="">
    <link href="./_mw_/ext.gadget.common-site.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/ext.gadget.logo.css" rel="stylesheet" type="text/css">
    <link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
    <link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
    <link rel="stylesheet" type="text/css" href="./_res_/footer.css">
    <link rel="stylesheet" type="text/css" href="./_res_/vector.css">
  </head>

  <body class="skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Stddef_h rootpage-Stddef_h skin-vector action-view">
    <div id="content" class="mw-body" role="main">
      <a id="top"></a>
      <h1 id="firstHeading" class="firstHeading mw-first-heading">stddef.h</h1>
      <div id="bodyContent" class="vector-body">
        <div id="contentSub">
          <div id="mw-content-subtitle"></div>
        </div>
        <div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="ru" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="ru" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r138740689">
/* start https://ru.wikipedia.org/ */


.mw-parser-output .ts-Боковая_навигационная_таблица-body{float:right;clear:right;width:23em;margin:0 0 1.0em 1.0em;background:var(--background-color-interactive-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);color:inherit;padding:0.4em;border-spacing:0.2em;text-align:center;line-height:1.4em;font-size:90%}.mw-parser-output .ts-Боковая_навигационная_таблица-outerTitle{padding-bottom:0.2em;font-size:125%;line-height:1.15em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage{padding:0 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-caption,.mw-parser-output .ts-Боковая_навигационная_таблица-image-caption{padding-top:0.2em;line-height:1.2em}.mw-parser-output .ts-Боковая_навигационная_таблица-preTitle{padding-top:0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-row+tr>.ts-Боковая_навигационная_таблица-preTitle{padding-top:0}.mw-parser-output .ts-Боковая_навигационная_таблица-image{padding:0.4em 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-title{padding:0.2em 0.4em 0.2em;font-size:125%;line-height:1.15em;font-weight:bold;background:var(--ruwiki-background-color-blue200,#cfe3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-above{padding:0.2em 0.4em 0.2em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-below{padding:0.2em 0.4em 0.2em;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-heading{padding:0.2em 0;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-list{padding:0.2em 0}


/* end   https://ru.wikipedia.org/ */
</style>
<p class="mw-empty-elt">
</p><p><b>stddef.h</b>&nbsp;— <a href="%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB" title="Заголовочный файл">заголовочный файл</a> <a href="%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%A1%D0%B8" title="Стандартная библиотека языка Си">стандартной библиотеки</a> <a href="%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" title="Язык программирования">языка программирования</a> <a href="%D0%A1%D0%B8_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)" title="Си (язык программирования)">С</a>, определяющий <a href="%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81" class="mw-redirect" title="Макрос">макросы</a> <a href="NULL_(%D0%A1%D0%B8)" title="NULL (Си)">NULL</a> и <a href="#offsetof">offsetof</a>, а также типы <a href="#ptrdiff_t">ptrdiff_t</a>, <a href="Wchar_t" class="mw-redirect" title="Wchar t">wchar_t</a> и <a href="#size_t">size_t</a>.
</p>

<div class="mw-heading mw-heading2"><h2 id="Включение"><span id=".D0.92.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5"></span>Включение</h2></div>
<p>Для использования <a href="%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB" title="Заголовочный файл">заголовочного файла</a> «<tt>stddef.h</tt>» в коде на языке <a href="%D0%A1%D0%B8_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)" title="Си (язык программирования)">C</a> используется директива <a href="%D0%9F%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80_%D0%A1%D0%B8" title="Препроцессор Си">препроцессора</a>:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stddef.h&gt;</span>
</pre></div>
<p>Стандарт языка <a href="C%2B%2B" title="C++">C++</a> определяет эквивалентный заголовочный файл «<tt>cstddef</tt>», подключаемый директивой:
</p>
<div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;cstddef&gt;</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Пространство_имён"><span id=".D0.9F.D1.80.D0.BE.D1.81.D1.82.D1.80.D0.B0.D0.BD.D1.81.D1.82.D0.B2.D0.BE_.D0.B8.D0.BC.D1.91.D0.BD"></span>Пространство имён</h2></div>
<p>Основное отличие «<tt>stddef.h</tt>» от «<tt>cstddef</tt>» заключается в том, что в «<tt>cstddef</tt>» определения <a href="%D0%A2%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Тип данных">типов</a> размещены в <a href="%D0%9F%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%BE_%D0%B8%D0%BC%D1%91%D0%BD" title="Пространство имён">пространстве имён</a> <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">std</span></code>. То есть, в C++ определены <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">std</span><span class="o">::</span><span class="kt">size_t</span></code> и <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">std</span><span class="o">::</span><span class="kt">ptrdiff_t</span></code> вместо <a href="#size_t">size_t</a> и <a href="#ptrdiff_t">ptrdiff_t</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="NULL"><span id="NULL"></span> NULL</h2></div>
<div role="note" class="hatnote navigation-not-searchable ts-main"><style data-mw-deduplicate="TemplateStyles:r142002967">
/* start https://ru.wikipedia.org/ */


.mw-parser-output .ts-main a{font-weight:bold}.mw-parser-output .ts-main a.new,.mw-parser-output .ts-main a.extiw,.mw-parser-output .ts-main a.external{font-weight:normal}


/* end   https://ru.wikipedia.org/ */
</style>Основная статья: <a href="NULL_(%D0%A1%D0%B8)" title="NULL (Си)">NULL</a></div>
<p>Константа <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="cp">#define</span></code> <a href="%D0%9F%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80_%D0%A1%D0%B8" title="Препроцессор Си">препроцессора</a>, обозначающая константный нулевой указатель и определённая одним из следующих способов (в зависимости от <a href="%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80" title="Компилятор">компилятора</a> и языка).
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#define NULL ((void*)0)</span>
<span class="cp">#define NULL 0</span>
<span class="cp">#define NULL 0L</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="offsetof(type,_member)"><span id="offsetof.28type.2C_member.29"></span><span id="offsetof"></span> offsetof(type, member)</h2></div>
<p>Макрос <a href="%D0%9F%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80_%D0%A1%D0%B8" title="Препроцессор Си">препроцессора</a>, определённый стандартом <a href="ANSI_C" title="ANSI C">ANSI C</a> и возвращающий значение типа <a href="#size_t">size_t</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>. Макрос вычисляет смещение в <a href="%D0%91%D0%B0%D0%B9%D1%82" title="Байт">байтах</a> поля <a href="%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%A1%D0%B8)" title="Структура (язык Си)">структуры</a> или <a href="%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)" title="Объединение (структура данных)">объединения</a> от начала структуры или объединения<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>.
</p><p>Классическая реализация макроса работала с <a href="%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80" title="Компилятор">компиляторами</a>, не проверяющими типы указателей, и основана на получении смещения поля структуры, размещёной в памяти по нулевому адресу:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#define offsetof( st, m ) ( (size_t) (&amp; ((st *)0)-&gt;m ) )</span>
</pre></div>
<p>Нулевой указатель преобразуется к указателю на структуру <tt>st</tt>. Затем оператор «&amp;» получает адрес поля <tt>m</tt> указанной структуры.
</p><p>Современные компиляторы реализуют макрос с помощью встроенных функций. Например, реализация <a href="GNU_Compiler_Collection" title="GNU Compiler Collection">gcc</a> выглядит следующим образом<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#define offsetof( st, m ) __builtin_offsetof( st, m )</span>
</pre></div>
<p>Использование встроенной функции имеет несколько преимуществ. Например, для кода на <a href="C%2B%2B" title="C++">C++</a> не вызывается перегруженный оператор «&amp;»<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>.
</p><p>Макрос <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">offsetof</span><span class="p">()</span></code> позволяет писать код, работающий с разными <a href="%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Структура данных">структурами данных</a> (см. <a href="%D0%9E%D0%B1%D0%BE%D0%B1%D1%89%D1%91%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Обобщённое программирование">обобщённое программирование</a>). Например, в коде <a href="%D0%AF%D0%B4%D1%80%D0%BE_Linux" title="Ядро Linux">ядра</a> <a href="%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0" title="Операционная система">ОС</a> <a href="Linux" title="Linux">Linux</a> с помощью <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">offsetof</span><span class="p">()</span></code> реализован макрос <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">container_of</span><span class="p">()</span></code>, получающий указатель на структуру по указателю на её поле<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#define container_of( ptr, type, member ) \</span>
<span class="cp">   ( \</span>
<span class="cp">      { \</span>
<span class="cp">         const typeof( ((type *)0)-&gt;member ) *__mptr = (ptr); \</span>
<span class="cp">         (type *)( (char *)__mptr - offsetof( type, member ) ); \</span>
<span class="cp">      } \</span>
<span class="cp">   )</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stddef.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>

<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="w">	</span><span class="k">struct</span><span class="w"> </span><span class="nc">car</span>
<span class="w">	</span><span class="p">{</span>
<span class="w">		</span><span class="kt">char</span><span class="w"> </span><span class="n">brand</span><span class="p">[</span><span class="mi">31</span><span class="p">];</span>
<span class="w">		</span><span class="kt">char</span><span class="w"> </span><span class="n">hp</span><span class="p">[</span><span class="mi">30</span><span class="p">];</span>
<span class="w">		</span><span class="kt">double</span><span class="w"> </span><span class="n">price</span><span class="p">;</span>
<span class="w">		</span><span class="kt">double</span><span class="w"> </span><span class="n">tmp</span><span class="p">;</span>
<span class="w">	</span><span class="p">}</span><span class="w"> </span><span class="n">t</span><span class="p">;</span>
<span class="w">	</span><span class="c1">//смещение относительно начала.</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">offsetof</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">car</span><span class="p">,</span><span class="w"> </span><span class="n">brand</span><span class="p">));</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">offsetof</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">car</span><span class="p">,</span><span class="w"> </span><span class="n">hp</span><span class="p">));</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">offsetof</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">car</span><span class="p">,</span><span class="w"> </span><span class="n">price</span><span class="p">));</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">offsetof</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">car</span><span class="p">,</span><span class="w"> </span><span class="n">tmp</span><span class="p">));</span>

<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="w">	</span><span class="c1">//размеры членов структуры</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">brand</span><span class="p">));</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">hp</span><span class="p">));</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">price</span><span class="p">));</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"%lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">tmp</span><span class="p">));</span>

<span class="w">	</span><span class="c1">// размер занимаемый структурой в памяти.</span>
<span class="w">	</span><span class="n">printf</span><span class="p">(</span><span class="s">"sizeof struct = %lu</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">car</span><span class="p">));</span><span class="w"> </span>
<span class="w">	</span>
<span class="p">}</span>
</pre></div>
<p>В реализации используется оператор <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">typeof</span><span class="p">()</span></code><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>, не описанный в стандарте языка C.
Пример использования макроса <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">container_of</span><span class="p">()</span></code>.
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">my_struct</span><span class="w"> </span><span class="p">{</span>
<span class="w">   </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w">   </span><span class="k">struct</span><span class="w"> </span><span class="nc">list_node</span><span class="w"> </span><span class="n">list</span><span class="p">;</span>
<span class="p">};</span>

<span class="k">extern</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">list_node</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">list_next</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">list_node</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">);</span>

<span class="kt">void</span><span class="w"> </span><span class="nf">example</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">   </span><span class="k">struct</span><span class="w"> </span><span class="nc">list_node</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">current</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="cm">/* ... */</span>
<span class="w">   </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">current</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="k">struct</span><span class="w"> </span><span class="nc">my_struct</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">element</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">container_of</span><span class="p">(</span><span class="w"> </span><span class="n">current</span><span class="p">,</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">my_struct</span><span class="p">,</span><span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="p">);</span>
<span class="w">      </span><span class="n">printf</span><span class="p">(</span><span class="w"> </span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">element</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="p">);</span>
<span class="w">      </span><span class="n">current</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">list_next</span><span class="p">(</span><span class="w"> </span><span class="o">&amp;</span><span class="n">element</span><span class="o">-&gt;</span><span class="n">list</span><span class="w"> </span><span class="p">);</span>
<span class="w">   </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>В примере перебираются элементы <a href="%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA" title="Связный список">связного списка</a>, по указателю на поле <tt>list</tt> вычисляется указатель на структуру <tt>my_struct</tt>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Тип_size_t"><span id=".D0.A2.D0.B8.D0.BF_size_t"></span><span id="size_t"></span> Тип size_t</h2></div>
<p><a href="%D0%A2%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Тип данных">Тип</a> <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">size_t</span></code> беззнаковый, создан специально для хранения размера объектов любых типов и имеет достаточную для этого <a href="%D0%A0%D0%B0%D0%B7%D1%80%D1%8F%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C" title="Разрядность">разрядность</a><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>. Разрядность зависит от платформы: на 32-битных платформах может составлять 32 бита, на 64-битных&nbsp;— 64 бита. Значения этого типа возвращают операторы <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="k">sizeof</span><span class="p">()</span></code>, <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">_Alignof</span><span class="p">()</span></code> и макрос <a href="#offsetof">offsetof</a>. Максимальное значение равно <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">SIZE_MAX</span></code> (константа <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="cp">#define</span></code> из файла «<tt><a href="Stdint.h" title="Stdint.h">stdint.h</a></tt>»).
</p><p>Стандарт <a href="POSIX" title="POSIX">POSIX</a> определяет знаковый тип <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">ssize_t</span></code> (файл «<tt><a href="Unistd.h" title="Unistd.h">unistd.h</a></tt>» для <a href="%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0" title="Операционная система">ОС</a> <a href="UNIX" class="mw-redirect" title="UNIX">UNIX</a> или файл «<tt>stddef.h</tt>» для GNU C). Тип <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">ssize_t</span></code> является типом <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">size_t</span></code> со знаком. Комментарий в файле «sys/types.h» гласит, что <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">ssize_t</span></code> используется для подсчёта байт и выявления ошибок, может хранить значения по крайней мере от <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="mi">-1</span></code> до <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">SSIZE_MAX</span></code>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Тип_wchar_t"><span id=".D0.A2.D0.B8.D0.BF_wchar_t"></span>Тип wchar_t</h2></div>
<div role="note" class="hatnote navigation-not-searchable ts-main">Основная статья: <a href="Wchar_t" class="mw-redirect" title="Wchar t">wchar_t</a></div>
<p><a href="%D0%A2%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Тип данных">Тип</a> <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">wchar_t</span></code> создан для хранения «широкого символа» (<a href="%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA" title="Английский язык">англ.</a>&nbsp;<span lang="en" style="font-style:italic;">wide character</span>), определён в файлах «<tt>stddef.h</tt>» и «<tt>wchar.h</tt>». <a href="%D0%A0%D0%B0%D0%B7%D1%80%D1%8F%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C" title="Разрядность">Разрядность</a> «широкого символа» зависит от реализации <a href="%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80" title="Компилятор">компилятора</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Тип_ptrdiff_t"><span id=".D0.A2.D0.B8.D0.BF_ptrdiff_t"></span><span id="ptrdiff_t"></span> Тип ptrdiff_t</h2></div>
<p><a href="%D0%A2%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Тип данных">Тип</a> <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">ptrdiff_t</span></code> создан для хранения разности между двумя указателями. <a href="%D0%A0%D0%B0%D0%B7%D1%80%D1%8F%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C" title="Разрядность">Разрядность</a> типа <code class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="kt">ptrdiff_t</span></code> зависит от платформы и реализации <a href="%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80" title="Компилятор">компилятора</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Ссылки"><span id=".D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"></span>Ссылки</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf">ISO/IEC 9899:2011 Черновик стандарта C11</a>&nbsp;<span class="ref-info" title="на английском языке" style="cursor:help;">(англ.)</span>.</li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090511184941/http://www.opengroup.org/pubs/online/7908799/xsh/stddef.h.html">Описание файла «stddef.h»</a> в стандарте «<a href="Single_UNIX_Specification" title="Single UNIX Specification">Single UNIX specification</a> 2».</li>
<li><a rel="nofollow" class="external text" href="http://www.cplusplus.com/reference/clibrary/cstddef/">Описание файла «cstddef»</a>. CPlusPlus.com.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Примечания"><span id=".D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D1.8F"></span>Примечания</h2></div>
<div class="reflist columns" style="list-style-type: decimal;">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://en.cppreference.com/w/c/types/offsetof">Макрос offsetof()</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20141219013332/http://en.cppreference.com/w/c/types/offsetof">Архивная копия</a> от 19 декабря 2014 на <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>&nbsp;<span class="ref-info" title="на английском языке" style="cursor:help;">(англ.)</span>. cppreference.com</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="citation"><span lang="und"><a rel="nofollow" class="external text" href="http://msdn.microsoft.com/en-us/library/dz4y9b9a.aspx">offsetof reference</a></span><span class="hidden-ref" style="display:none;">&nbsp;</span>. <a href="MSDN" class="mw-redirect" title="MSDN">MSDN</a>. Дата обращения: 19 сентября 2010. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20111010130120/http://msdn.microsoft.com/en-us/library/dz4y9b9a.aspx">Архивировано</a> 10 октября 2011 года.</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><span class="citation"><span lang="und"><a rel="nofollow" class="external text" href="http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Offsetof.html">Описание макроса offsetof(). Документация gcc. gnu.org</a></span><span class="hidden-ref" style="display:none;">&nbsp;</span>. <a href="Free_Software_Foundation" class="mw-redirect" title="Free Software Foundation">Free Software Foundation</a>. Дата обращения: 19 сентября 2010. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100724235737/http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Offsetof.html">Архивировано</a> 24 июля 2010 года.</span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="citation"><span lang="und"><a rel="nofollow" class="external text" href="http://stackoverflow.com/questions/400116/what-is-the-purpose-and-return-type-of-the-builtin-offsetof-operator/406941#406941">What is the purpose and return type of the __builtin_offsetof operator?</a></span><span class="hidden-ref" style="display:none;">&nbsp;</span> Дата обращения: 20 октября 2012. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20141215044302/http://stackoverflow.com/questions/400116/what-is-the-purpose-and-return-type-of-the-builtin-offsetof-operator/406941#406941">Архивировано</a> 15 декабря 2014 года.</span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="citation"><i><a href="%D0%9A%D1%80%D0%BE%D0%B0-%D0%A5%D0%B0%D1%80%D1%82%D0%BC%D0%B0%D0%BD%2C_%D0%93%D1%80%D0%B5%D0%B3" title="Кроа-Хартман, Грег">Кроа-Хартман, Грег</a>.</i> <span lang="und"><a rel="nofollow" class="external text" href="http://www.kroah.com/log/linux/container_of.html">Макрос <tt>container_of()</tt></a></span><span class="hidden-ref" style="display:none;">&nbsp;</span>. Журнал «<a href="Linux_Journal" title="Linux Journal">Linux Journal</a>» (июнь 2003). Дата обращения: 19 сентября 2010. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100213091627/http://www.kroah.com/log/linux/container_of.html">Архивировано</a> 13 февраля 2010 года.</span></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://gcc.gnu.org/onlinedocs/gcc/Typeof.html">Оператор typeof()</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20220509131452/https://gcc.gnu.org/onlinedocs/gcc/Typeof.html">Архивная копия</a> от 9 мая 2022 на <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>. Документация gcc. gnu.org</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://en.cppreference.com/w/c/types/size_t">Тип size_t</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20141219013102/http://en.cppreference.com/w/c/types/size_t">Архивная копия</a> от 19 декабря 2014 на <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>. cppreference.com</span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
    Эта статья взята у (из) <a class="external text" title="Последний раз редактировалась 2025-11-15" href="https://ru.wikipedia.org/wiki/?title=Stddef.h&amp;oldid=149883923">Википедия</a>. Текст лицензируется по <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.ru">Creative Commons Attribution-Share Alike 4.0</a>. К медиа файлам могут применятся дополнительные условия.
</div>
</div><!--/htdig_noindex--></div>
      </div>
    </div>
     <script src="./_webp_/webpHandler.js"></script>
  

</body></html>