함수 이름 주위의 괄호는 무엇을 의미합니까?
프로젝트 소스 파일 중 하나에서 다음 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
'programing' 카테고리의 다른 글
Vue.js 2, WATCH "워처 "Your AccountState" 콜백 오류: "ReferenceError: 값이 정의되지 않았습니다." (0) | 2022.08.13 |
---|---|
형식 스크립트가 포함된 Vuex 4를 사용하는 유형 'ComponentPublicInstance'에 속성 '$store'가 없습니다. (0) | 2022.08.13 |
수동으로 마운트된 vue 구성 요소 내에서 vuex 사용 (0) | 2022.08.13 |
메서드 내 Vuejs 빌드/렌더 컴포넌트와 템플릿 출력 (0) | 2022.08.10 |
Java의 assertEquals 메서드는 신뢰할 수 있습니까? (0) | 2022.08.10 |