728x90
이 오류는 괄호()를 이용해 함수를 호출하려 했지만, 해당 식별자가 실제 함수나 함수 포인터가 아닌 경우 발생합니다. 즉, 함수가 아닌 변수나 자료형에 괄호를 붙여 호출하려 하면 컴파일러는 이를 호출할 수 없다고 판단합니다.
자주 발생하는 상황은 함수 이름을 실수로 변수명으로 사용하거나, 함수 포인터가 아닌 일반 변수를 함수처럼 사용하려 했을 때입니다.
● 오류 예제
#include <stdio.h>
int main() {
int x = 10;
x(); // 오류: x는 함수가 아님
return 0;
}
컴파일 시 다음과 같은 오류가 출력됩니다.
error: called object is not a function or function pointer
● 해결 방법
함수 호출 시 사용된 식별자가 실제 함수 또는 함수 포인터인지 확인해야 합니다. 변수를 함수처럼 사용하면 안 됩니다.
#include <stdio.h>
void greet() {
printf("Hello!\n");
}
int main() {
greet(); // 함수 호출 → 정상
return 0;
}
또는 함수 포인터를 사용할 경우 다음과 같이 선언 후 호출합니다.
#include <stdio.h>
void greet() {
printf("Hi from pointer!\n");
}
int main() {
void (*func_ptr)() = greet;
func_ptr(); // 함수 포인터를 통해 호출
return 0;
}
출력 결과:
Hello!
Hi from pointer!
● 실전 팁
- 괄호()는 함수 호출 용도로만 사용되므로, 변수나 값에 붙이지 마세요.
- 함수 이름과 변수 이름이 충돌하지 않도록 주의하세요.
- 함수 포인터를 사용할 경우, 타입 선언과 초기화를 정확히 작성해야 합니다.
괄호를 사용해 호출을 시도할 때는 해당 식별자가 함수이거나 함수 포인터인지 반드시 확인해야 합니다. 그렇지 않으면 컴파일러는 호출 대상으로 인식하지 않고 오류를 발생시킵니다.
728x90