이 코드는 왜 함수 이름 양옆에 괄호를 붙여놨나요?

프로젝트 소스파일에서 이런 C함수를 찾았습니다

int (foo) (int *bar)
{
    return foo (bar);
}

처음엔 함수 포인턴줄 알았는데 그것도 아니더라구요 왜 괄호로 감싸준 걸까요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    전처리를 하지 않았다면 int (foo) (int *bar)int foo(int *bar)와 동일합니다.

    소스코드 전체가 있는 게 아니라서 확신할 순 없지만, 보통 함수랑 매크로가 같은 이름을 갖고 있을 때 매크로가 확장되는걸 방지하는 역할로 함수 이름에 괄호를 씌워줍니다

    /* macro */
    #define isdigit(c) ...
    
    /* function */
    int (isdigit)(int c) // 괄호를 써서 매크로랑 구별. 우선순위가 더 높아짐
    {
      return isdigit(c); // 매크로 사용
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.