setjmpとlongjmpはC言語の標準ライブラリ関数

libpngではsetjmp(3)とlongjmp(3)が多用されている。エラー処理に使っているようだ。わりとすばらしい。


setjmp/longjmpというと、ユーザーレベルスレッドの実装でコンテキストスイッチに使ったり、Cからレジスタへのマニアックなアクセスをするときに使ったり、また一部の人からは『関数間を飛び越える超危険なGOTO』という認識を受けていたりと、標準でありながら使うのをちゅうちょされるうえにマニアックな使い道しかないという実質標準なんかじゃないカワイソウな関数だと思っていたのに、勘違だった。それでも使うのをちゅうちょするのは会社のコードをチェックする人間の大体が『関数間を飛び越える超危険なGOTOであり、絶対に使ってはいけない』という認識を持っていることを知っているからだ。