謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

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;
}