REDGUY: hele, k tomu setjmp/longjmp - já to chci využívat velice specifickým způsobem, který má implementovat (vnořovatelnou) try { } strukturu odchytávání vyjímek. tedy někaé "longjmp dovnitř rememeber" je úplný nesmysl - když se podíváš na moje starší pokusy (pravda, nedokonalé), tak z nich vyplyne, že
a) skočit lze pouze na místo,kde si udělal setjmp (v mém případě tedy jen dovnitř makra try { }), a
b) lonjmp se volá v místě vyjímky
tedy nemůžeš z principu skočit "dovnitř" něčeho, kde si před tím nebyl: opustíš ovšem několik úrovní scope - a pokud tyto scopy měly vlastní memory pool/pamětový kontext, tak by bylo žádoucí na úrovni toho odskoku provést patřičné operace - tedy nastavit správný kontext a uvolnit ty opuštěné.
podotýkám, že jde o stejný problém, jako např. o uzavření otevřeného souboru, pokut vyjímku vyvolá operace čtení - pokud to neuděláš, tak se všechny sobory uzavřou po ukončení programu, a všechna alokovaná paměť se taky uvolní po ukončení programu.
já budu logicky uvažovat tak, abych v rámci svého systému ošetření vyjímek pokud možno řešil vše, co jsem mohl "pootvírat" automatickými strukturami jazyka: tedy pokud budu mít nějaké for_each na čtení souboru, bylo by asi rozumné ten soubor zavřít - a to samé v případě paměti, socketů...
ano, bylo by samozřejmě zajímavé posoudit, jak to dělají ostatní jazyky - když vyjímka nastane v situaci, kdy máš X otevřených souborů, spoustu inicializovaných objektů, apod. - a najednou skočíš do jiné části programu a odchytáváš vyjímku. - nemyslím, že tohle je C specifický problém, a několikrát jsem zmiňoval, že systém odchytávání vyjímek je ošemetný a neměl by být nadužíván (já jsem viděl příklady, kdy se s vyjímkou počítá jako v podstatě "normální situací", pro řízení algoritmu - např. že nemožnost přidat prvek do SQL tabulky je odchycen jako vyjímka, apod.)