programing

함수 이름 주위의 괄호는 무엇을 의미합니까?

yoursource 2022. 8. 13. 12:36
반응형

함수 이름 주위의 괄호는 무엇을 의미합니까?

프로젝트 소스 파일 중 하나에서 다음 C 함수 정의를 찾았습니다.

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

주의: 다음 항목 옆에 별표가 없습니다.foo함수 포인터가 아닙니다.아니면 그러한가?재귀 호출은 어떻게 되어가고 있나요?

프리프로세서가 없는 경우,foo의 서명은 에 상당합니다.

int foo (int *bar)

필자가 본 유일한 문맥은 함수와 같은 이름의 함수와 같은 매크로가 동시에 존재하며 프로그래머가 매크로 확장을 방지하고자 하는 경우입니다.

이 방법은 처음에는 좀 이상하지만 C 라이브러리는 동일한 이름의 매크로와 함수를 제공함으로써 선례를 남깁니다.

이러한 기능/매크로 쌍 중 하나는isdigit()라이브러리에서는 다음과 같이 정의할 수 있습니다.

/* the macro */
#define isdigit(c) ...

/* the function */
int (isdigit)(int c) /* avoid the macro through the use of parentheses */
{
  return isdigit(c); /* use the macro */
}

당신의 기능은 위와 거의 같기 때문에, 당신의 코드에도 이런 것이 있다고 생각합니다.

파라치들은 선언을 바꾸지 않는다 - 그것은 여전히 라고 불리는 평범한 함수를 정의하고 있을 뿐이다.foo.

그것들이 사용된 이유는 거의 확실히 기능적인 매크로가 있기 때문입니다.foo정의:

#define foo(x) ...

사용.(foo)함수 선언에서는 이 매크로가 여기서 확장되지 않도록 합니다.그래서 일어날 수 있는 일은 어떤 함수가foo()그 본체가 기능성 매크로에서 확장되어 정의되고 있다.foo.

괄호는 의미가 없어요.
보이는 코드는 무한 재귀에 불과합니다.

함수 포인터를 정의할 때 의미가 있는 이상한 괄호가 표시될 수 있습니다.하지만 여기서는 그렇지 않다.

언급URL : https://stackoverflow.com/questions/13600790/what-do-the-parentheses-around-a-function-name-mean

반응형