이 macro의 기능은 뭘까요?

라스코니의 이미지

어떤 네트웍카드 드라이버 소스 코드를 분석하다 보니 아래와 같은 macro가 나오는데 어떤 기능때문에 쓰는 걸까요?

#define _func_enter_ do{}while(0)
#define _func_exit_ do{}while(0)

이 macro를 함수 내용 시작부와 종료부에서 사용하거든요???
예를 들어 아래와 같이 씁니다. 혹시 뭐 때문에 쓰는지 아시는 분 있는지요?

int func(int a, int b)
{
   _func_enter_;
 
   // do something
 
   _func_exit_;
 
   return x;
}

DarkSide의 이미지

약간의 시간을 벌려고 하는게 아닐까요?

jick의 이미지

개발중에 매크로 정의를 바꿔치면 단순무식한 디버깅 용도로 쓸 수 있습니다. 예를 들면,

#define _func_enter_ printf("Entering function %s\n", __func__)
#define _func_exit_ printf("Exiting function %s\n", __func__)

(커널 드라이버라면 printf는 안될 테니 뭔가 적당히 비슷한 다른 함수를 썼겠죠.)

그리고 개발이 다 끝나서 소스를 공개할 때는 더 이상 로그를 남길 필요가 없으니 "아무 것도 안하는" 매크로로 바꿔서 올리면 되는 거죠.

라스코니의 이미지

충분히 가능성 있는 방법이네요.
call trace 할 때 유용하겠군요.