Setjmp.h

setjmp.h  on tavallisen C - kirjaston otsikkotiedosto , joka ilmoittaa makrot ja tietotyypit ei-paikallisille hyppyille [1] . C:ssä on goto-lause , jonka avulla voit hypätä minne tahansa funktion sisällä (joillain varoin), mutta et voi käyttää sitä hyppäämiseen funktioiden välillä.

Tietotyypit

Kirjasto ilmoittaa tietotyypin jmp_buf, joka on taulukko ja jota voidaan käyttää ohjelman suorituskontekstin tallentamiseen ja palauttamiseen. Tyyppi ei sisällä tietoja liukulukukontekstista , avoimien tiedostojen tilasta tai muista komponenteista [1] .

Funktiot (makrot)

#include <setjmp.h> int setjmp ( jmp_buf env ); void longjmp ( jmp_buf env , int val );

Standardi ilmoittaa kaksi funktiota: setjmp()(voi olla makro) ja longjmp()kontekstin tallentamista ja palauttamista varten. Funktio setjmp()tallentaa kontekstin env- muuttujaan ja palauttaa 0:n, jos se oli suora kutsu, tai nollasta poikkeavan arvon, jos se oli palautus lähteestä longjmp()[1] .

Standardi kieltää setjmp-funktion tuloksen tallentamisen ja asettaa rajoituksia puhelun paikalle.

Funktio longjmp() palauttaa suorituksen kutsujalle setjmp()arvolla val. Kaikki manuaaliset muistiobjektit säilyttävät arvonsa. Automaattiset objektit, joissa on tarkenne, säilyttävät myös arvonsa volatile.

Jos toimintoa kutsuttiin ilman vastaavaa kutsua setjmp()tai jos toiminto, jossa suoritusta palautetaan, on jo poistunut, käyttäytyminen on määrittelemätön.

setjmp()- ja -käyttö longjmp()voi johtaa muistivuotojin , jos näiden toimintojen kutsujen välillä tapahtuu allokointia [1] .

Sovellus

Niitä käytetään yhdessä poikkeuskäsittelymenetelmistä  - SJLJ, joka tarkoittaa "setjmp/longjmp" [2] . Tätä mekanismia käytettiin C++-poikkeuksien varhaisissa toteutuksissa [3] .

Sitä voidaan käyttää myös yhteistoiminnallisessa moniajossa [4] .

Muistiinpanot

  1. 1 2 3 4 ISO/IEC 9899:1999 . Haettu 4. elokuuta 2011. Arkistoitu alkuperäisestä 22. elokuuta 2011.
  2. ↑ WindowsGCCImprovements - GCC Wiki  . gcc.gnu.org. Haettu 5. tammikuuta 2019. Arkistoitu alkuperäisestä 13. kesäkuuta 2019.
  3. Christophe de Dinechin. C++ poikkeusten käsittely IA-64 :lle  //  www.usenix.org : sivusto. - 2000. - 22. lokakuuta. Arkistoitu alkuperäisestä 6. tammikuuta 2019.
  4. Pituushyppy  . _ DR. Dobb's (11. marraskuuta 2012). Haettu 5. tammikuuta 2019. Arkistoitu alkuperäisestä 6. tammikuuta 2019.