summaryrefslogtreecommitdiff
path: root/devdocs/c/language%2F_alignof.html
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
committerCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
commit754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch)
treef1190704f78f04a2b0b4c977d20fe96a828377f1 /devdocs/c/language%2F_alignof.html
new repository
Diffstat (limited to 'devdocs/c/language%2F_alignof.html')
-rw-r--r--devdocs/c/language%2F_alignof.html51
1 files changed, 51 insertions, 0 deletions
diff --git a/devdocs/c/language%2F_alignof.html b/devdocs/c/language%2F_alignof.html
new file mode 100644
index 00000000..1a478589
--- /dev/null
+++ b/devdocs/c/language%2F_alignof.html
@@ -0,0 +1,51 @@
+ <h1 id="firstHeading" class="firstHeading">_Alignof operator <span class="t-mark-rev t-since-c11">(since C11)</span>
+</h1> <p>Queries the alignment requirement of its operand type.</p>
+<h3 id="Syntax"> Syntax</h3> <table class="t-sdsc-begin"> <tr class="t-sdsc"> <td> <code>_Alignof(</code> <span class="t-spar">type-name</span> <code>)</code> </td> <td class="t-sdsc-nopad"> </td> <td> <span class="t-mark-rev t-since-c11">(since C11)</span> </td>
+</tr> <tr class="t-sdsc"> <td> <code>alignof(</code> <span class="t-spar">type-name</span> <code>)</code> </td> <td class="t-sdsc-nopad"> </td> <td> <span class="t-mark-rev t-since-c23">(since C23)</span> </td>
+</tr>
+</table> <table class="t-rev-begin"> <tr class="t-rev t-until-c23">
+<td> <p>This operator is typically used through the convenience macro <a href="../types" title="c/types"><code>alignof</code></a>, which is provided in the header <a href="../types" title="c/types"><code>&lt;stdalign.h&gt;</code></a></p>
+</td> <td><span class="t-mark-rev t-until-c23">(until C23)</span></td>
+</tr> </table> <h3 id="Explanation"> Explanation</h3> <p>Returns the <a href="object#Alignment" title="c/language/object">alignment requirement</a> of the type <a href="type#Type_names" title="c/language/type">named</a> by <span class="t-spar">type-name</span>. If <span class="t-spar">type-name</span> is an array type, the result is the alignment requirement of the array element type. The <span class="t-spar">type-name</span> cannot be function type or an incomplete type.</p>
+<p>The result is an integer constant of type <code><a href="../types/size_t" title="c/types/size t">size_t</a></code>.</p>
+<p>The operand is not evaluated (so external identifiers used in the operand do not have to be defined).</p>
+<p>If <span class="t-spar">type-name</span> is a <a href="array" title="c/language/array">VLA</a> type, its size expression is not evaluated.</p>
+<h3 id="Notes"> Notes</h3> <p>The use of <span class="t-rev-inl t-until-c23"><span><code>_Alignof</code></span><span><span class="t-mark-rev t-until-c23">(until C23)</span></span></span><span class="t-rev-inl t-since-c23"><span><code>alignof</code></span><span><span class="t-mark-rev t-since-c23">(since C23)</span></span></span> with expressions is allowed by some C compilers as a non-standard extension.</p>
+<h3 id="Keywords"> Keywords</h3> <p><a href="../keyword/alignof" title="c/keyword/alignof"><code>alignof</code></a>, <a href="../keyword/_alignof" title="c/keyword/ Alignof"><code>_Alignof</code></a></p>
+<h3 id="Example"> Example</h3> <div class="t-example"> <div class="c source-c"><pre data-language="c">#include &lt;stdalign.h&gt;
+#include &lt;stddef.h&gt;
+#include &lt;stdio.h&gt;
+
+int main(void)
+{
+ printf("Alignment of char = %zu\n", alignof(char));
+ printf("Alignment of max_align_t = %zu\n", alignof(max_align_t));
+ printf("alignof(float[10]) = %zu\n", alignof(float[10]));
+ printf("alignof(struct{char c; int n;}) = %zu\n",
+ alignof(struct {char c; int n;}));
+}</pre></div> <p>Possible output:</p>
+<div class="text source-text"><pre data-language="c">Alignment of char = 1
+Alignment of max_align_t = 16
+alignof(float[10]) = 4
+alignof(struct{char c; int n;}) = 4</pre></div> </div> <h3 id="Defect_reports"> Defect reports</h3> <p>The following behavior-changing defect reports were applied retroactively to previously published C standards.</p>
+<table class="dsctable"> <tr> <th>DR </th> <th>Applied to </th> <th>Behavior as published </th> <th>Correct behavior </th>
+</tr> <tr> <td>
+<a rel="nofollow" class="external text" href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2396.htm#dr_494">DR 494</a> </td> <td>C11 </td> <td>whether the size expression in a VLA is evaluated in <code>_Alignof</code> was unspecified </td> <td>it is unevaluated </td>
+</tr>
+</table> <h3 id="References"> References</h3> <ul>
+<li> C23 standard (ISO/IEC 9899:2023): </li>
+<ul><li> 6.5.3.4 The sizeof and alignof operators (p: TBD) </li></ul>
+<li> C17 standard (ISO/IEC 9899:2018): </li>
+<ul><li> 6.5.3.4 The sizeof and _Alignof operators (p: 64-65) </li></ul>
+<li> C11 standard (ISO/IEC 9899:2011): </li>
+<ul><li> 6.5.3.4 The sizeof and _Alignof operators (p: 90-91) </li></ul>
+</ul> <h3 id="See_also"> See also</h3> <table class="t-dsc-begin"> <tr class="t-dsc"> <td> <div><a href="../types/max_align_t" title="c/types/max align t"> <span class="t-lines"><span>max_align_t</span></span></a></div>
+<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> a type with alignment requirement as great as any other scalar type <br> <span class="t-mark">(typedef)</span> </td>
+</tr> <tr class="t-dsc"> <td> <a href="_alignas" title="c/language/ Alignas"><code>_Alignas</code> specifier</a><span class="t-mark-rev t-since-c11">(C11)</span> </td> <td> sets alignment requirements of an object </td>
+</tr> <tr class="t-dsc"> <td colspan="2"> <span><a href="https://en.cppreference.com/w/cpp/language/alignof" title="cpp/language/alignof">C++ documentation</a></span> for <code>alignof operator</code> </td>
+</tr> </table> <div class="_attribution">
+ <p class="_attribution-p">
+ &copy; cppreference.com<br>Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.<br>
+ <a href="https://en.cppreference.com/w/c/language/_Alignof" class="_attribution-link">https://en.cppreference.com/w/c/language/_Alignof</a>
+ </p>
+</div>