프로그래밍언어/C언어[Error]
[C언어][Error] 024. function returning function is not allowed – 함수가 함수를 반환하려 함
about_IT
2025. 4. 24. 19:33
728x90
이 오류는 C언어에서 함수가 다른 함수를 직접 반환하려고 할 때 발생합니다. 하지만 C언어 문법상 함수가 또 다른 함수를 반환하는 것은 허용되지 않습니다. 함수는 값을 반환하거나, 함수 포인터를 통해 다른 함수에 대한 접근만 가능해야 합니다.
개념적으로는 함수가 함수처럼 보이는 무언가를 반환하고 싶을 때가 있지만, 이러한 경우에는 반드시 함수 포인터를 사용해야 합니다.
● 오류 예제
// 잘못된 선언 예시
int foo() {
return bar(); // bar가 함수이고, foo도 bar를 반환하고자 함 (잘못된 의도)
}
// 오류 선언 예시
int bar()() { // 문법적으로 허용되지 않음
return 0;
}
위와 같은 구조는 컴파일러가 인식할 수 없는 함수 타입이며, 다음과 같은 오류를 발생시킵니다.
error: function returning function is not allowed
● 해결 방법
함수를 반환하고자 할 때는 함수 그 자체가 아닌, 함수 포인터를 반환하도록 선언해야 합니다.
#include <stdio.h>
int say_hello() {
printf("Hello\n");
return 0;
}
int (*get_func())() {
return say_hello;
}
int main() {
int (*func_ptr)() = get_func();
func_ptr(); // 함수 포인터 호출
return 0;
}
출력 결과:
Hello
● 실전 팁
- C언어에서 함수는 값을 반환하거나, 함수 포인터만 반환할 수 있습니다.
- 함수 선언 시 반환형에 괄호를 붙여 중첩 함수처럼 보이는 문법은 오류입니다.
- 복잡한 반환 타입이 필요한 경우 typedef를 활용하면 가독성이 향상됩니다.
C언어는 단순하고 명확한 함수 구조를 따르기 때문에, 함수 간 연결은 함수 포인터를 통해 수행해야 합니다. 함수를 반환하려는 구조는 반드시 포인터를 사용해 구현하세요.
728x90