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

조회수 2787회

프로젝트 소스파일에서 이런 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); // 매크로 사용
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)