в общем-то, сабж сам за себя говорит. сто лет собирался что-то такое себе сделать, но всё лапы не дотягивались. как обычно у самбы — немного засрано и надо чутка напильником обработать, но то хуйня.
конечно, setjmp()/longjmp() в компот насрёт, так что в этом случае таки придётся или ползти на кресты, или ебаться с кастомным препроцессором, который будет создавать unwinder'ы, но во многих других случаях — няняняня!
если кто не понял: няшненький «goto quit;» из очень-вложеного-блока бережно заклеанапит всё, что надо. и да: всякие for() и while() тоже работают: перед повторением тела не менее бережно клеанапят помеченое.
скажите «good night, sweet prince» идиотским ручным очисткам памяти перед всякими аварийными return'ами, break'ами и goto — 21-й век, всё-таки. а кто не использует gcc — тот дурак.