scope_exit文
GCC拡張のcleanup attribute使えば簡単にscope_exit文を作れそうだな、と思って作ってみた。ネスト関数のプロトタイプ関数に使うautoとか初めて使った。
#include <stdio.h> #define scope_exit() \ auto void on_scope_exit(void *ptr);\ __attribute__((cleanup(on_scope_exit))) int __scope_exit[0];\ void on_scope_exit(void *ptr) int foo(){ scope_exit() { printf("foo exit\n"); } printf("foo start\n"); } int bar(){ scope_exit() { printf("bar exit\n"); } printf("bar start\n"); foo(); } int main(){ foo(); bar(); return 0; }