내 프로젝트 소스 파일 중 하나 에서이 C 함수 정의를 찾았습니다.
int (foo) (int *bar)
{
return foo (bar);
}
참고 : 옆에 별표가 없으므로 foo
함수 포인터가 아닙니다. 아니면? 재귀 호출로 여기서 무슨 일이 일어나고 있습니까?
7
아니요, 함수 포인터가 아닙니다. 여전히 foo라는 일반 함수입니다.
—
Nemanja Boric
이것이 완전한 기능입니까?
—
asheeshr
이 기능이 유용한 컨텍스트에서 사용되었다는 증거가 있습니까?
—
moooeeeep 2011
... 기존 소스에서 컴파일되어 제거되었는지 확인하기 위해 방금 작성된 더미 함수처럼 보입니다. 최악의 스택 오버플로에서 무한 루프 (C 컴파일러가 꼬리 호출을 최적화하도록 허용되는지 확실하지 않음)이므로 그것을 제거합니다 (함수가 실제로하는 경우).
—
하이드
C 선언의 괄호는 언어를 모호하게하는 데 도움이됩니다. 빨리, 무엇
—
Kaz
a(b);
입니까? b
유형의 변수로 선언 a
? 또는 a
인수 를 사용하여 함수 를 호출 b
합니까? 차이점은 구문 론적이며의 선언 정보를 찾지 않고 구문 분석하는 방법을 알 수 없습니다 a
. 즉, postfix 함수 호출 괄호 또는 선언자 주위의 선택적 괄호입니다.