<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-menu-disabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-os vector-feature-navigation-update-disabled vector-sticky-header-enabled skin-thumbsize-clientpref-standard" lang="it" dir="ltr"><head>
    <meta charset="UTF-8">
    <title>Assert.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://it.wikipedia.org/wiki/Assert.h"> <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/mediawiki.skinning.content.parsoid.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
    <meta name="ResourceLoaderDynamicStyles" content="">
    
    <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-2022.css">
  </head>
  <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Assert_h rootpage-Assert_h skin-vector-2022 action-view">
    <div class="mw-page-container">
      <div class="mw-page-container-inner">
        <div class="mw-content-container">
          <main id="content" class="mw-body">
            <header class="mw-body-header vector-page-titlebar">
              <h1 id="firstHeading" class="firstHeading mw-first-heading">assert.h</h1>
            </header>
            <a id="top"></a>
            <div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
              <div id="contentSub">
                <div id="mw-content-subtitle"></div>
              </div>
              <div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="it" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="it" dir="ltr" data-mw-parsoid-version="0.24.0.0-alpha15" data-mw-html-version="2.8.0"><section data-mw-section-id="0" id="mwAQ">
<span typeof="mw:Transclusion" id="mwAw"></span>

<p id="mwBA"><b id="mwBQ">assert.h</b> è il <a rel="mw:WikiLink" href="Direttiva_di_inclusione" title="Direttiva di inclusione" id="mwBg">file di intestazione</a> della <a rel="mw:WikiLink" href="Libreria_standard_del_C" title="Libreria standard del C" id="mwBw">libreria standard del C</a> che implementa il sistema di <a rel="mw:WikiLink" href="Asserzione_(informatica)" title="Asserzione (informatica)" id="mwCA">asserzione</a>, definendo la macro <code id="mwCQ">assert()</code>. Tale macro può essere utilizzata per verificare e controllare l'eventuale verificarsi di casi "impossibili" nel programma.</p>

</section><section data-mw-section-id="1" id="mwCw" aria-labelledby="Descrizione"><div class="mw-heading mw-heading2"><h2 id="Descrizione">Descrizione</h2></div>
<table class="wikitable" id="mwDA"> 
<tbody id="mwDQ"><tr bgcolor="#e9e9e9" id="mwDg">
<th id="mwDw">Nome</th><th id="mwEA">Descrizione</th></tr>
<tr id="mwEQ">
<td id="mwEg"><code id="mwEw">assert</code></td><td id="mwFA">Quando questa macro viene eseguita, essa computa il risultato dell'espressione fornìtale: se essa risulta essere falsa (in altre parole, se il valore finale risulta essere 0), <code id="mwFQ">assert</code> scrive alcune informazioni di <a rel="mw:WikiLink" href="Debug" title="Debug" class="mw-redirect" id="mwFg">debug</a> su <code id="mwFw">stderr</code> e, successivamente, richiama la funzione <code id="mwGA">abort()</code>. Le informazioni riportate su stderr includono:
<ul id="mwGQ"><li id="mwGg">il testo dell'espressione che ha fornito il risultato 0</li>
<li id="mwGw">il nome del file sorgente (la macro predefinita __FILE__)</li>
<li id="mwHA">il numero della linea in cui si è fallita l'asserzione (la macro predefinita __LINE__)</li></ul></td></tr>
</tbody></table>
<p id="mwHQ">L'utilità della macro <code id="mwHg">assert()</code> risiede nella semplicità con la quale si può verificare un'affermazione che si ritiene, in un dato contesto, banalmente ovvia: ad esempio, ricontrollare il valore di una variabile sulla quale si sono già effettuate delle verifiche. Nel codice che segue, la macro <code id="mwHw">assert()</code> viene utilizzata per controllare che il valore della variabile "scelta" sia effettivamente compreso nel range valido, nonostante l'uscita dal ciclo while implicitamente affermi la veridicità di questa condizione.</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr mw-highlight-lines" dir="ltr" typeof="mw:Extension/syntaxhighlight" id="mwIA"><pre id="mwIQ"><span id="mwIg"></span><span class="linenos" data-line="1" id="mwIw"></span><span class="kt" id="mwJA">int</span><span class="w" id="mwJQ"> </span><span class="n" id="mwJg">scelta</span><span class="w" id="mwJw"> </span><span class="o" id="mwKA">=</span><span class="w" id="mwKQ"> </span><span class="mi" id="mwKg">0</span><span class="p" id="mwKw">;</span>
<span class="linenos" data-line="2" id="mwLA"></span><span class="w" id="mwLQ"> </span>
<span class="linenos" data-line="3" id="mwLg"></span><span class="k" id="mwLw">do</span><span class="w" id="mwMA"> </span><span class="p" id="mwMQ">{</span>
<span class="linenos" data-line="4" id="mwMg"></span><span class="w" id="mwMw"> </span><span class="cm" id="mwNA">/* Visualizzo un menù con 4 scelte numerate da 1 a 4 */</span>
<span class="linenos" data-line="5" id="mwNQ"></span><span class="w" id="mwNg"> </span><span class="n" id="mwNw">scanf</span><span class="p" id="mwOA">(</span><span class="s" id="mwOQ">"%d"</span><span class="p" id="mwOg">,</span><span class="w" id="mwOw"> </span><span class="o" id="mwPA">&amp;</span><span class="n" id="mwPQ">scelta</span><span class="p" id="mwPg">);</span>
<span class="linenos" data-line="6" id="mwPw"></span><span class="p" id="mwQA">}</span><span class="w" id="mwQQ"> </span>
<span class="linenos" data-line="7" id="mwQg"></span><span class="k" id="mwQw">while</span><span class="w" id="mwRA"> </span><span class="p" id="mwRQ">(</span><span class="n" id="mwRg">scelta</span><span class="o" id="mwRw">&lt;</span><span class="mi" id="mwSA">1</span><span class="w" id="mwSQ"> </span><span class="o" id="mwSg">||</span><span class="w" id="mwSw"> </span><span class="n" id="mwTA">scelta</span><span class="o" id="mwTQ">&gt;</span><span class="mi" id="mwTg">4</span><span class="p" id="mwTw">);</span>
<span class="linenos" data-line="8" id="mwUA"></span><span class="w" id="mwUQ"> </span>
<span class="linenos" data-line="9" id="mwUg"></span><span class="cm" id="mwUw">/* Primo blocco di operazioni eseguite in base al valore scelto */</span>
<span class="linenos" data-line="10" id="mwVA"></span><span class="w" id="mwVQ"> </span>
<span class="linenos" data-line="11" id="mwVg"></span><span class="n" id="mwVw">assert</span><span class="p" id="mwWA">(</span><span class="n" id="mwWQ">scelta</span><span class="o" id="mwWg">&gt;=</span><span class="mi" id="mwWw">1</span><span class="w" id="mwXA"> </span><span class="o" id="mwXQ">&amp;&amp;</span><span class="w" id="mwXg"> </span><span class="n" id="mwXw">scelta</span><span class="w" id="mwYA"> </span><span class="o" id="mwYQ">&lt;=</span><span class="mi" id="mwYg">4</span><span class="p" id="mwYw">);</span>
<span class="linenos" data-line="12" id="mwZA"></span><span class="w" id="mwZQ"> </span>
<span class="linenos" data-line="13" id="mwZg"></span><span class="cm" id="mwZw">/* Secondo blocco di operazioni eseguite in base al valore scelto */</span>
</pre></div>

<p id="mwaA">Utilizzando <code id="mwaQ">assert()</code>, il programmatore si accerta nuovamente che la condizione che aveva provocato l'uscita dal ciclo while sia ancora vera: in questo caso, ad esempio, verifica di non aver accidentalmente modificato il valore della variabile <code id="mwag">scelta</code> all'interno del primo blocco di operazioni.</p><p id="mwaw">

L'utilizzo di <code id="mwbA">assert()</code> dovrebbe essere limitato alla sola fase di sviluppo di un programma. Infatti, la mancanza di verifica dell'asserzione provoca l'interruzione immediata dell'applicazione fornendo scarse informazioni in merito all'errore, anche se può essere usato l'<a rel="mw:WikiLink" href="Operatore_virgola" title="Operatore virgola" id="mwbQ">operatore virgola</a> per aggiungere informazioni all'espressione stampata, come in <code id="mwbg">assert(("2+2 fa 4", 2 + 2 == 5));</code>. Inoltre, la macro non dovrebbe essere adoperata in casi in cui ci sia una seppur piccola probabilità di fallimento, ad esempio in un'<a rel="mw:WikiLink" href="Allocazione_dinamica_della_memoria" title="Allocazione dinamica della memoria" id="mwbw">allocazione dinamica della memoria</a>:</p><div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr" typeof="mw:Extension/syntaxhighlight" id="mwcA"><pre id="mwcQ"><span id="mwcg"></span><span class="kt" id="mwcw">int</span><span class="w" id="mwdA"> </span><span class="o" id="mwdQ">*</span><span class="n" id="mwdg">ptr</span><span class="w" id="mwdw"> </span><span class="o" id="mweA">=</span><span class="w" id="mweQ"> </span><span class="n" id="mweg">malloc</span><span class="p" id="mwew">(</span><span class="k" id="mwfA">sizeof</span><span class="p" id="mwfQ">(</span><span class="kt" id="mwfg">int</span><span class="p" id="mwfw">)</span><span class="w" id="mwgA"> </span><span class="o" id="mwgQ">*</span><span class="w" id="mwgg"> </span><span class="mi" id="mwgw">10</span><span class="p" id="mwhA">);</span><span class="w" id="mwhQ"> </span>
<span class="n" id="mwhg">assert</span><span class="p" id="mwhw">(</span><span class="n" id="mwiA">ptr</span><span class="w" id="mwiQ"> </span><span class="o" id="mwig">!=</span><span class="w" id="mwiw"> </span><span class="nb" id="mwjA">NULL</span><span class="p" id="mwjQ">);</span>
</pre></div>

<p id="mwjg">Quando il programmatore non ha più bisogno delle asserzioni, invece di eliminarle tutte manualmente può definire la costante <code id="mwjw">NDEBUG</code> prima di includere nel file sorgente l'header <code id="mwkA">assert.h</code>: in questo modo, la macro <code id="mwkQ">assert()</code> viene espansa semplicemente in: <code id="mwkg">#define assert(ignore)((void) 0)</code>, eliminando quindi ogni possibile interazione con il programma. Dunque, in presenza di <code id="mwkw">NDEBUG</code> eventuali espressioni passate a <code id="mwlA">assert()</code> non verranno valutate.</p>

</section><section data-mw-section-id="2" id="mwlQ" aria-labelledby="Voci_correlate"><div class="mw-heading mw-heading2"><h2 id="Voci_correlate">Voci correlate</h2></div>
<ul id="mwlg"><li id="mwlw"><a rel="mw:WikiLink" href="Libreria_standard_del_C" title="Libreria standard del C" id="mwmA">Libreria standard del C</a></li></ul>

</section><section data-mw-section-id="3" id="mwmQ" aria-labelledby="Altri_progetti"><div class="mw-heading mw-heading2"><h2 id="Altri_progetti">Altri progetti</h2></div>
<div id="interProject" style="border: 1px solid var(--border-color-base, #a2a9b1); display: none; clear: both; padding: .5em" typeof="mw:Transclusion"><p id="sisterProjects"><span>Altri progetti</span></p><ul title="Collegamenti verso gli altri progetti Wikimedia">
<li class="" title=""><a rel="mw:WikiLink/Interwiki" href="https://it.wikibooks.org/wiki/C/Appendice/Librerie%20standard" title="b:C/Appendice/Librerie standard" class="extiw external">Wikibooks</a></li></ul></div><ul><li><span typeof="mw:File"><img alt="Collabora a Wikibooks" src="./_assets_/a57f5814152f3049267aded607469870.png" decoding="async" data-file-width="300" data-file-height="300" data-file-type="drawing" height="18" width="18" class="mw-file-element" loading="lazy"></span> <a rel="mw:WikiLink/Interwiki" href="https://it.wikibooks.org/wiki/" title="b:" class="extiw external">Wikibooks</a> contiene testi o manuali su <b><a rel="mw:WikiLink/Interwiki" href="https://it.wikibooks.org/wiki/C/Appendice/Librerie%20standard" title="b:C/Appendice/Librerie standard" class="extiw external">Assert.h</a></b></li></ul>

</section><section data-mw-section-id="4" id="mwmg" aria-labelledby="Collegamenti_esterni"><div class="mw-heading mw-heading2"><h2 id="Collegamenti_esterni">Collegamenti esterni</h2></div>
<ul id="mwmw"><li id="mwnA"><span typeof="mw:Transclusion" id="mwnQ">(</span><span style="font-weight:bolder; font-size:80%"><abbr title="inglese">EN</abbr></span><span>) </span> <a rel="mw:ExtLink nofollow" href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/assert.h.html" class="external text" id="mwng">assert.h</a> da The Open Group Base Specifications Issue 7</li>
<li id="mwnw"><cite class="citation web" style="font-style:normal" typeof="mw:Transclusion" id="mwoA">(<span style="font-weight:bolder; font-size:80%"><abbr title="inglese">EN</abbr></span>) <a rel="mw:ExtLink nofollow" href="https://www.gnu.org/software/libc/manual/html_node/Consistency-Checking.html" class="external text"><span style="font-style:italic;">Consistency Checking - The GNU C Library</span></a>, su <span style="font-style:italic;">gnu.org</span>.</cite></li>
<li id="mwoQ"><cite class="citation web" style="font-style:normal" typeof="mw:Transclusion" id="mwog">(<span style="font-weight:bolder; font-size:80%"><abbr title="inglese">EN</abbr></span>) <a rel="mw:ExtLink nofollow" href="https://web.archive.org/web/20120621043500/http://www.cplusplus.com/reference/clibrary/cassert/" class="external text"><span style="font-style:italic;">C Diagnostics Library</span></a>, su <span style="font-style:italic;">cplusplus.com</span>. <small>URL consultato il 3 luglio 2012</small> <small>(archiviato dall'<abbr title="http://www.cplusplus.com/reference/clibrary/cassert/">url originale</abbr> il 21 giugno 2012)</small>.</cite></li>
<li id="mwow"><a rel="mw:ExtLink nofollow" href="https://web.archive.org/web/20101124224627/http://appuntilinux.mirror.garr.it/mirrors/appuntilinux/a2/a295.htm#almltitle4039" class="external text" id="mwpA">69.2 File «assert.h»</a> da <a rel="mw:WikiLink" href="Appunti_di_informatica_libera" title="Appunti di informatica libera" id="mwpQ">Appunti di informatica libera</a></li></ul>



</section></div><!--htdig_noindex--><div><div class="zim-footer">
    Questa voce è stata pubblicata da <a class="external text" title="Ultima modifica il 2025-08-11" href="https://it.wikipedia.org/wiki/?title=Assert.h&amp;oldid=146211494">Wikipedia</a>. Il testo è rilasciato in base alla licenza <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.it">Creative Commons Attribution-Share Alike 4.0</a>, salvo diversa indicazione. Potrebbero essere applicate clausole aggiuntive per i file multimediali.
</div>
</div><!--/htdig_noindex--></div>
            </div>
          </main>
        </div>
      </div>
    </div>
     <script src="./_webp_/webpHandler.js"></script>
  

</body></html>