반응형
함수의 선언 방식, 반환형, 전방 선언
C에서 함수의 기본적인 특징
C 언어에서 함수는 기본적으로 전역 함수이다. 또한, 오버로딩을 지원하지 않는다
C는 절차적 언어다. 항상 위에서 아래로 코드가 실행되기 때문에 함수가 선언되기 전 호출되면 문제가 발생할 여지가 잇다
컴파일러가 처음 등장한 함수 호출을 기본적으로 int 반환형으로 가정하기 때문이다
따라서, 나중에 반환형이 int가 아닌 것으로 확인되면 컴파일 오류가 발생한다
#include <stdio.h>
int main(void)
{
/* sayHello()가 정의되기 전에 호출됨 */
say_hello();
return 0;
}
void say_hello(void)
{
printf("Hello, World!\n");
}
만약 잘못된 반환형을 사용하려 하면 위와 같이 컴파일 에러가 발생한다
(C89에서는 선언 없이 함수 호출이 가능했지만, C99 이후 표준에서는 함수 선언 없이 호출할 경우 컴파일 에러가 발생한다)
컴파일러가 say_hello를 만났을 때 int형이라 가정하고 로직을 진행했는데, 나중에 확인해보니 void 반환형이였기 때문에 타입 충돌이 일어나는 것이다
이러한 문제를 해결하기 위해 전방 선언이라는 것을 사용한다
함수 선언과 정의의 차이
C에서는 함수 선언과 정의를 구분해야 한다
함수 선언은 함수의 시그니처를 미리 알려주는 역할을 하며, 함수 정의는 실제 구현부를 의미한다
#include <stdio.h>
/* 전방 선언 */
void say_hello(void);
int main(void)
{
/* 함수 선언이 되어 있어 정상적으로 호출됨 */
say_hello();
return 0;
}
void say_hello(void)
{
printf("Hello, World!\n");
}
이렇게 코드를 짜서 앞의 문제를 해결할 수 있다
Reference
'프로그래밍 > C, C++' 카테고리의 다른 글
C 빌드 과정 (0) | 2025.04.09 |
---|---|
C 언어 배열 (0) | 2025.04.09 |
C 언어에서 전역/지역 변수를 어떻게 활용할 것인가? (0) | 2025.04.08 |
C 언어의 bool 형 (0) | 2025.04.08 |
C 역참조 연산자(*)와 주소 연산자(&) (0) | 2025.04.08 |