5
-pedantic -Wall
에 gcc
과 clang
을 모두 사용하여 오류나 경고없이 컴파일하는 것으로 나타났습니다.함수의 매개 변수로서의 함수
#include <stdio.h>
int x = 0;
void func(int f(const char *)) {
f("func()!");
}
int main(void) {
func(puts);
}
이 파라미터 f
이 경우 int (*)(const char *)
기능하도록 포인터로 취급되는 것으로 보인다.
그러나 이것은 내가 본 적이 없거나 전혀 들리지 않은 행동입니다. 이 합법적 인 C 코드입니까? 그렇다면 함수에 대한 매개 변수로 함수가있을 때 어떤 일이 발생합니까?
함수 포인터는 유효한 매개 변수이며, 예를 들어 서로 다른 콜백 함수를 전달할 수 있습니다. 그것들을받는 함수는 그 함수를 호출 할 수 있습니다. 아무런 문제가 없습니다. –
이 경우 매개 변수의 타입은 "함수에 대한 포인터"가 아니라 "함수"로 작성되며,이 경우에는 대신 int (* f) (const char *)로 선언됩니다. – wefwefa3
이것은 구문 설탕이며 선언을 읽기 쉽게 할 수 있습니다. 중복 된 질문의 대답에 대한 첫 번째 의견을 참조하십시오. –