" 

 ==Sisäiset sieppauslohkot== 
 Laitan tämän esimerkin tänne enkä artikkeliin, koska se on niin hirveän hakkerimainen. Tärkeintä on, että tajusin kirjoitettuani edellä olevan kommentin, että ei ole mitään tapaa ""uudelleen heittää"" mielivaltainen tila ensimmäisestä takaisin mainiin; sisäkkäisen funktion on ""ilmoitettava"" jokainen poikkeustyyppi, jonka se saattaa heittää uudelleen, minkä olen tehnyt RETHROW(value) -makron avulla. N.B.: memcpy-kutsut tekevät käytännössä taatusti oikein, koska jmp_buf on ""array-tyyppi, joka soveltuu kutsuvan ympäristön palauttamiseen tarvittavien tietojen säilyttämiseen"". (Se ei silti tarkoita, että se todella sisältää kaikki ympäristön palauttamiseen tarvittavat tiedot - se voi olla array[1] osoittimista tietueisiin, jotka todella sisältävät tietoja. Mutta se olisi vain pahasta.) 
 :Jos joku keksii kirjaston (ei alkuperäistutkimus ), joka käyttää setjmp:tä tällä tavalla, se olisi mielestäni arvokas lisä artikkeliin.   

  #include  
  #include  
  #include  
 
  staattinen jmp_buf global_jmpbuf; 
 
   
  #define THROW(arvo) longjmp(global_jmpbuf, arvo) 
  #define TRY do { jmp_buf tmp; \\ 
                          memcpy(tmp, global_jmpbuf, sizeof tmp); \\ 
                          switch (setjmp(global_jmpbuf)) { case 0: 
  #define CATCH(value) break; case value: 
  #define RETHROW(value) break; case value: \ 
                          memcpy(global_jmpbuf, tmp, sizeof tmp); \\ 
                          THROW(arvo); 
  #define ENDTRY break; } \ 
                          memcpy(global_jmpbuf, tmp, sizeof tmp); } while (0) 
 
  void first(void); 
  void second(void); 
 
  int main() 
  { 
      KOKEILE { 
          first(); 
          puts(""Palattu pääohjelmaan.""); 
      } CATCH(1) { 
          puts(""Caught 1 in main""); 
      } ENDTRY; 
      palaa 0; 
  } 
 
  void first(void) 
  { 
      KOKEILE { 
          second(); 
      } CATCH(2) { 
          puts(""Caught 2 in first""); 
      } RETHROW(1) ENDTRY; 
      paluu; 
  } 
 
  void second(void) 
  { 
      THROW(1); 
   /* THROW(2); */ 
  }"