<!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-sticky-header-enabled skin-theme-clientpref-thumb-standard" lang="pt" dir="ltr"><head>
    <meta charset="UTF-8">
    <title>Setjmp.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://pt.wikipedia.org/wiki/Setjmp.h"> <link href="./_mw_/ext.cite.parsoid.styles.css" rel="stylesheet" type="text/css">
    <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_/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 href="./_mw_/ext.gadget.keepPDU.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-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-Setjmp_h rootpage-Setjmp_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">setjmp.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="pt" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="pt" dir="ltr" data-mw-parsoid-version="0.24.0.0-alpha2" data-mw-html-version="2.8.0"><section data-mw-section-id="0" id="mwAQ"><span typeof="mw:Transclusion" id="mwAg"></span>
<table class="infobox" style="text-align: center; font-size:90%;" typeof="mw:Transclusion" id="mwAw">
<tbody><tr><td style="text-align: center;"><b><a rel="mw:WikiLink" href="Biblioteca_padr%C3%A3o_do_C" title="Biblioteca padrão do C">Biblioteca padrão do C</a></b></td></tr>
<tr>
<td style="text-align: left;">
<ul><li><a rel="mw:WikiLink" href="Assert.h" title="Assert.h">assert.h</a></li>
<li><a rel="mw:WikiLink" href="Complex.h" title="Complex.h">complex.h</a></li>
<li><a rel="mw:WikiLink" href="Ctype.h" title="Ctype.h">ctype.h</a></li>
<li><a rel="mw:WikiLink" href="Errno.h" title="Errno.h">errno.h</a></li>
<li>fenv.h</li>
<li><a rel="mw:WikiLink" href="Float.h" title="Float.h">float.h</a></li>
<li>inttypes.h</li>
<li><a rel="mw:WikiLink" href="Iso646.h" title="Iso646.h">iso646.h</a></li>
<li><a rel="mw:WikiLink" href="Limits.h" title="Limits.h">limits.h</a></li>
<li><a rel="mw:WikiLink" href="Locale.h" title="Locale.h" class="mw-redirect">locale.h</a></li>
<li><a rel="mw:WikiLink" href="Math.h" title="Math.h">math.h</a></li>
<li><a rel="mw:WikiLink" href="Setjmp.h" class="mw-selflink selflink">setjmp.h</a></li>
<li><a rel="mw:WikiLink" href="Signal.h" title="Signal.h">signal.h</a></li>
<li><a rel="mw:WikiLink" href="Stdarg.h" title="Stdarg.h">stdarg.h</a></li>
<li><a rel="mw:WikiLink" href="Stdbool.h" title="Stdbool.h">stdbool.h</a></li>
<li><a rel="mw:WikiLink" href="Stddef.h" title="Stddef.h">stddef.h</a></li>
<li><a rel="mw:WikiLink" href="Stdint.h" title="Stdint.h">stdint.h</a></li>
<li><a rel="mw:WikiLink" href="Stdio.h" title="Stdio.h">stdio.h</a></li>
<li><a rel="mw:WikiLink" href="Stdlib.h" title="Stdlib.h">stdlib.h</a></li>
<li><a rel="mw:WikiLink" href="String.h" title="String.h">string.h</a></li>
<li><a rel="mw:WikiLink" href="Tgmath.h" title="Tgmath.h" class="mw-redirect">tgmath.h</a></li>
<li><a rel="mw:WikiLink" href="Time.h" title="Time.h">time.h</a></li>
<li><a rel="mw:WikiLink" href="Wchar.h" title="Wchar.h" class="mw-redirect">wchar.h</a></li>
<li><a rel="mw:WikiLink" href="Wctype.h" title="Wctype.h" class="mw-redirect">wctype.h</a></li></ul></td></tr>

</tbody></table>
<p id="mwBA"><b id="mwBQ">setjmp.h</b> é um <a rel="mw:WikiLink" href="Arquivo_cabe%C3%A7alho" title="Arquivo cabeçalho" class="mw-redirect" id="mwBg">arquivo cabeçalho</a> da <a rel="mw:WikiLink" href="Biblioteca_padr%C3%A3o_do_C" title="Biblioteca padrão do C" id="mwBw">biblioteca padrão</a> da <a rel="mw:WikiLink" href="Linguagem_de_programa%C3%A7%C3%A3o" title="Linguagem de programação" id="mwCA">linguagem de programação</a> <a rel="mw:WikiLink" href="C" title="C" id="mwCQ">C</a> que fornece declarações para <a rel="mw:WikiLink" href="Sub-rotina" title="Sub-rotina" class="mw-redirect" id="mwCg">funções</a> ou <a rel="mw:WikiLink" href="Macro" title="Macro" id="mwCw">macros</a> para funcionalidade de saltos que não seguem a forma usual de chamadas para <a rel="mw:WikiLink" href="Sub-rotina" title="Sub-rotina" class="mw-redirect" id="mwDA">subrotinas</a> e a sequência de retornos<sup class="mw-ref reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1" id="mwDQ"><span class="mw-reflink-text" id="mwDg"><span class="cite-bracket" id="mwDw">[</span>1<span class="cite-bracket" id="mwEA">]</span></span></a></sup>.</p>

<p id="mwEQ">Um uso típico para as funções setjmp e longjmp é a implementação de um mecanismo de <a rel="mw:WikiLink" href="Tratamento_de_exce%C3%A7%C3%A3o" title="Tratamento de exceção" id="mwEg">tratamento de exceções</a><sup class="mw-ref reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2" id="mwEw"><span class="mw-reflink-text" id="mwFA"><span class="cite-bracket" id="mwFQ">[</span>2<span class="cite-bracket" id="mwFg">]</span></span></a></sup> que utiliza a longjmp para re-estabelecer o estado de um programa ou <a rel="mw:WikiLink" href="Thread" title="Thread" class="mw-disambig" id="mwFw">thread</a>, mesmo numa chamada com múltiplos níveis<sup class="mw-ref reference" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-3" id="mwGA"><span class="mw-reflink-text" id="mwGQ"><span class="cite-bracket" id="mwGg">[</span>3<span class="cite-bracket" id="mwGw">]</span></span></a></sup>. Outro uso para setjmp é criar uma sintaxe similar a co-rotinas.</p>

</section><section data-mw-section-id="1" id="mwHA" aria-labelledby="Exemplo"><div class="mw-heading mw-heading2"><h2 id="Exemplo">Exemplo</h2></div>

<p id="mwHQ">O exemplo abaixo mostra a ideia básica do setjmp:</p>

<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr" typeof="mw:Extension/syntaxhighlight" id="mwHg"><pre id="mwHw"><span id="mwIA"></span><span class="cp" id="mwIQ">#include</span><span class="w" id="mwIg"> </span><span class="cpf" id="mwIw">&lt;stdio.h&gt;</span>
<span class="cp" id="mwJA">#include</span><span class="w" id="mwJQ"> </span><span class="cpf" id="mwJg">&lt;setjmp.h&gt;</span>

<span class="k" id="mwJw">static</span><span class="w" id="mwKA"> </span><span class="kt" id="mwKQ">jmp_buf</span><span class="w" id="mwKg"> </span><span class="n" id="mwKw">controladorJmp</span><span class="p" id="mwLA">;</span>

<span class="kt" id="mwLQ">void</span><span class="w" id="mwLg"> </span><span class="nf" id="mwLw">segunda</span><span class="p" id="mwMA">(</span><span class="kt" id="mwMQ">void</span><span class="p" id="mwMg">)</span><span class="w" id="mwMw"> </span><span class="p" id="mwNA">{</span>
<span class="w" id="mwNQ">  </span><span class="n" id="mwNg">printf</span><span class="p" id="mwNw">(</span><span class="s" id="mwOA">"segunda</span><span class="se" id="mwOQ">\n</span><span class="s" id="mwOg">"</span><span class="p" id="mwOw">);</span><span class="w" id="mwPA"> </span><span class="c1" id="mwPQ">// será impresso na tela</span>

<span class="w" id="mwPg">  </span><span class="c1" id="mwPw">// pula de volta para onde setjmp() foi chamada,</span>
<span class="w" id="mwQA">  </span><span class="c1" id="mwQQ">// e faz com que ela agora retorne 1</span>
<span class="w" id="mwQg">  </span><span class="n" id="mwQw">longjmp</span><span class="p" id="mwRA">(</span><span class="n" id="mwRQ">controladorJmp</span><span class="p" id="mwRg">,</span><span class="w" id="mwRw"> </span><span class="mi" id="mwSA">1</span><span class="p" id="mwSQ">);</span>
<span class="p" id="mwSg">}</span>

<span class="kt" id="mwSw">void</span><span class="w" id="mwTA"> </span><span class="nf" id="mwTQ">primeira</span><span class="p" id="mwTg">(</span><span class="kt" id="mwTw">void</span><span class="p" id="mwUA">)</span><span class="w" id="mwUQ"> </span><span class="p" id="mwUg">{</span>
<span class="w" id="mwUw">  </span><span class="n" id="mwVA">segunda</span><span class="p" id="mwVQ">();</span>
<span class="w" id="mwVg">  </span><span class="n" id="mwVw">printf</span><span class="p" id="mwWA">(</span><span class="s" id="mwWQ">"primeira</span><span class="se" id="mwWg">\n</span><span class="s" id="mwWw">"</span><span class="p" id="mwXA">);</span><span class="w" id="mwXQ"> </span><span class="c1" id="mwXg">// não será impresso na tela</span>
<span class="p" id="mwXw">}</span>

<span class="kt" id="mwYA">int</span><span class="w" id="mwYQ"> </span><span class="nf" id="mwYg">main</span><span class="p" id="mwYw">()</span><span class="w" id="mwZA"> </span><span class="p" id="mwZQ">{</span>
<span class="w" id="mwZg">  </span><span class="k" id="mwZw">if</span><span class="w" id="mwaA"> </span><span class="p" id="mwaQ">(</span><span class="n" id="mwag">setjmp</span><span class="p" id="mwaw">(</span><span class="n" id="mwbA">controladorJmp</span><span class="p" id="mwbQ">)</span><span class="w" id="mwbg"> </span><span class="o" id="mwbw">==</span><span class="w" id="mwcA"> </span><span class="mi" id="mwcQ">0</span><span class="p" id="mwcg">)</span><span class="w" id="mwcw"> </span><span class="p" id="mwdA">{</span>
<span class="w" id="mwdQ">    </span><span class="n" id="mwdg">primeira</span><span class="p" id="mwdw">();</span>
<span class="w" id="mweA">  </span><span class="p" id="mweQ">}</span><span class="w" id="mweg"> </span><span class="k" id="mwew">else</span><span class="w" id="mwfA"> </span><span class="p" id="mwfQ">{</span><span class="w" id="mwfg"> </span><span class="c1" id="mwfw">// quando longjmp() é chamada, setjmp() retornou 1</span>
<span class="w" id="mwgA">    </span><span class="n" id="mwgQ">printf</span><span class="p" id="mwgg">(</span><span class="s" id="mwgw">"main</span><span class="se" id="mwhA">\n</span><span class="s" id="mwhQ">"</span><span class="p" id="mwhg">);</span><span class="w" id="mwhw"> </span><span class="c1" id="mwiA">// será impresso na tela</span>
<span class="w" id="mwiQ">  </span><span class="p" id="mwig">}</span>
<span class="w" id="mwiw">  </span><span class="k" id="mwjA">return</span><span class="w" id="mwjQ"> </span><span class="mi" id="mwjg">0</span><span class="p" id="mwjw">;</span>
<span class="p" id="mwkA">}</span>
</pre></div>

<p id="mwkQ">Quando executado, o programa acima imprime na tela:</p>

<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr" typeof="mw:Extension/syntaxhighlight" id="mwkg"><pre id="mwkw"><span id="mwlA"></span>segunda
main
</pre></div>

</section><section data-mw-section-id="-1" id="mwlQ" aria-labelledby="Referências"><div class="mw-heading mw-heading2"><h2 typeof="mw:Transclusion" id="Referências"><span id="Refer.C3.AAncias" typeof="mw:FallbackId"></span><span style="cursor: help;" title="Esta seção foi configurada para não ser editável diretamente. Edite a página toda ou a seção anterior em vez disso.">Referências</span></h2></div><span>

</span><div class="reflist" style=" list-style-type: decimal;" id="mwlg"><div class="mw-references-wrap" typeof="mw:Extension/references" id="mwlw"><ol class="mw-references references" id="mwmA"><li id="cite_note-1" data-mw-footnote-number="1"><span class="mw-cite-backlink" id="mwmQ"><a href="#cite_ref-1" rel="mw:referencedBy" id="mwmg"><span class="mw-linkback-text" id="mwmw">↑</span></a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text reference-text"><cite class="citation web" typeof="mw:Transclusion" id="mwnA"><a rel="mw:ExtLink nofollow" href="http://pubs.opengroup.org/onlinepubs/000095399/basedefs/setjmp.h.html" class="external text" id="mwnQ">«&lt;setjmp.h&gt;»</a>. The Open Group<span class="reference-accessdate" id="mwng">. Consultado em 31 de dezembro de 2011</span></cite><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fpt.wikipedia.org%3ASetjmp.h&amp;rft.btitle=%3Csetjmp.h%3E&amp;rft.genre=unknown&amp;rft.pub=The+Open+Group&amp;rft_id=http%3A%2F%2Fpubs.opengroup.org%2Fonlinepubs%2F000095399%2Fbasedefs%2Fsetjmp.h.html&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988" id="mwnw"><span style="display:none;" id="mwoA"><span typeof="mw:Entity" id="mwoQ">&nbsp;</span></span></span></span></li>
<li id="cite_note-2" data-mw-footnote-number="2"><span class="mw-cite-backlink" id="mwog"><a href="#cite_ref-2" rel="mw:referencedBy" id="mwow"><span class="mw-linkback-text" id="mwpA">↑</span></a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text reference-text"><cite class="citation web" typeof="mw:Transclusion" id="mwpQ"><a rel="mw:ExtLink nofollow" href="http://www.swig.org/Doc1.1/HTML/Exceptions.html#n3" class="external text" id="mwpg">«Exception handling with longjmp()»</a>. Simplified Wrapper Interface Generator. 4 de agosto de 1997<span class="reference-accessdate" id="mwpw">. Consultado em 31 de dezembro de 2011</span></cite><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fpt.wikipedia.org%3ASetjmp.h&amp;rft.btitle=Exception+handling+with+longjmp%28%29&amp;rft.date=1997-08-04&amp;rft.genre=unknown&amp;rft.pub=Simplified+Wrapper+Interface+Generator&amp;rft_id=http%3A%2F%2Fwww.swig.org%2FDoc1.1%2FHTML%2FExceptions.html%23n3&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988" id="mwqA"><span style="display:none;" id="mwqQ"><span typeof="mw:Entity" id="mwqg">&nbsp;</span></span></span></span></li>
<li id="cite_note-3" data-mw-footnote-number="3"><span class="mw-cite-backlink" id="mwqw"><a href="#cite_ref-3" rel="mw:referencedBy" id="mwrA"><span class="mw-linkback-text" id="mwrQ">↑</span></a></span> <span id="mw-reference-text-cite_note-3" class="mw-reference-text reference-text"><cite class="citation web" typeof="mw:Transclusion" id="mwrg"><a rel="mw:ExtLink nofollow" href="http://linux.die.net/man/3/setjmp" class="external text" id="mwrw">«setjmp(3) - Linux man page»</a>. Linux Man Pages<span class="reference-accessdate" id="mwsA">. Consultado em 31 de dezembro de 2011</span></cite><span title="ctx_ver=Z39.88-2004&amp;rfr_id=info%3Asid%2Fpt.wikipedia.org%3ASetjmp.h&amp;rft.btitle=setjmp%283%29+-+Linux+man+page&amp;rft.genre=unknown&amp;rft.pub=Linux+Man+Pages&amp;rft_id=http%3A%2F%2Flinux.die.net%2Fman%2F3%2Fsetjmp&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988" id="mwsQ"><span style="display:none;" id="mwsg"><span typeof="mw:Entity" id="mwsw">&nbsp;</span></span></span></span></li>
</ol></div></div>

<span>
</span>

</section></div><!--htdig_noindex--><div><div class="zim-footer">
    Este artigo é emitido por <a class="external text" title="Última edição em 2022-07-10" href="https://pt.wikipedia.org/wiki/?title=Setjmp.h&amp;oldid=63970472">Wikipédia</a>. O texto é licenciado sob <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.pt">Creative Commons Attribution-Share Alike 4.0</a>. Termos adicionais podem ser aplicados aos arquivos de mídia.
</div>
</div><!--/htdig_noindex--></div>
            </div>
          </main>
        </div>
      </div>
    </div>
     <script src="./_webp_/webpHandler.js"></script>
  

</body></html>