함수(function)란 특정하고 명확하게 정의된 작업을 수행하는 독립적인 코드 블록입니다. C 언어에서 함수는 프로그램을 모듈 단위로 구조화하는 핵심 요소이며, 함수가 올바르게 호출되기 위해서는 함수 프로토타입(prototype)에 대한 이해가 필수적입니다.
함수의 종류
C 언어의 함수는 크게 두 가지 유형으로 분류할 수 있습니다.
- 라이브러리 함수(Predefined functions): 컴파일러와 표준 라이브러리에 미리 정의되어 제공되는 함수 (예: printf, scanf)
- 사용자 정의 함수(User defined functions): 프로그래머가 필요에 따라 직접 작성하는 함수
함수 간 통신
함수들은 인수(argument)와 반환값(return value)을 사용하여 서로 데이터를 주고받습니다. C 언어 함수의 일반적인 형식은 다음과 같습니다.
반환_자료형 함수이름 (인수_목록) {
지역 변수 선언;
실행문;
return (표현식);
}
예를 들어, void mul(int x, int y) 함수는 아래와 같이 작성할 수 있습니다.
{
int p;
p = x * y;
printf("product = %d", p);
}
함수 프로토타입이란?
함수 프로토타입은 함수의 이름, 반환 자료형, 매개변수의 개수와 자료형을 컴파일러에게 미리 알려주는 선언문입니다. 프로토타입을 선언하는 방법은 크게 두 가지가 있습니다.
1. 함수 선언부를 복사하는 방식
각 인수의 자료형을 명시한 함수 선언을 복사하여 사용합니다. 이때 매개변수 이름(식별자)은 포함해도 되고 생략해도 됩니다.
int func(int, float, unsigned [2]);
int func(int i, float f, unsigned u[2]);
2. 함수 정의를 프로토타입 형식으로 작성하는 방식
함수 정의 자체를 프로토타입 형식으로 작성하여 선언할 수도 있습니다.
int func(int i, float f, unsigned u[2]) {
/* func의 실제 코드 */
}
함수 프로토타입의 활용
프로토타입은 단순한 선언을 넘어 컴파일 단계에서 중요한 역할을 수행합니다.
자료형 불일치 검사: 프로토타입이 선언된 함수가 호환되지 않는 자료형의 인수를 하나 이상 전달받아 호출될 경우, 컴파일러가 이를 감지하여 오류를 알려줍니다. 덕분에 런타임 오류를 사전에 방지할 수 있습니다.
중복 선언 검증: 동일한 함수에 대한 명시적(explicit) 또는 암시적(implicit) 선언이 여러 번 나타날 때, 컴파일러는 중복된 선언들을 면밀히 검토하여 서로 불일치하는 부분을 찾아내고 경고를 발생시킵니다.
결론적으로 함수 프로토타입은 컴파일러가 함수 호출의 올바름을 검증할 수 있도록 돕는 안전장치이며, 안정적이고 유지보수하기 쉬운 C 프로그램을 작성하는 데 반드시 필요한 요소입니다.