2018년 4월 11일 수요일

GCC와 Clang의 RAII

GLib 코딩을 하다가 g_autoptr() 이라는 매크로가 보이길래, C로 또 무슨 흑마술을 부렸나 살펴봤더니 RAII (Resource acquisition is initialization) 기법을 가능하게 하는 확장이 생겼습니다. cleanup 이라는 이름의 확장입니다. 다음과 같은 형태로 쓸 수 있습니다.


void clean_up(int *final_value)
{
  printf("Cleaning up\n");
  printf("Final value: %d\n",*final_value);

}

int main(int argc, char **argv)
{
  /* declare cleanup attribute along with initiliazation
     Without the cleanup attribute, this is equivalent 
     to:
     int avar = 1;
  */
  
  int avar __attribute__ ((__cleanup__(clean_up))) = 1;
  avar = 5;

  return 0;
}
다음에는 간단한 ref count 시스템을 만들어봐야겠군요 :-)

댓글 없음:

댓글 쓰기