C언어 함수 프로토타입
요약
C언어 함수 프로토타입(Function Prototype)의 개념과 사용법을 알아봅니다. 함수 선언과 정의의 차이, 프로토타입이 필요한 경우와 작성 방법을 정리합니다.
이 글은 함수의 기초를 이해하고 있다는 전제로 작성되었습니다. 매개변수와 반환값이 아직 익숙하지 않다면 함수 페이지를 먼저 읽어보세요.
함수 프로토타입 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 함수 프로토타입 | 함수의 반환형, 이름, 매개변수 타입만 미리 선언하는 것 | int gamja(int, int); |
| 필요한 이유 | 컴파일러 1가 코드를 첫째 줄부터 순서대로 읽기 때문에, 함수 정의가 호출보다 아래에 있으면 함수를 모름 | 함수 정의가 main 아래에 있을 때 |
| 작성 방법 | 함수 정의에서 본문을 빼고 세미콜론(;)으로 끝냄 | int gamja(int a, int b); |
함수 프로토타입이란? 쌩기초
함수 프로토타입 (Function Prototype)은 함수를 미리 선언하는 것입니다. "이런 함수가 아래에 있으니 사용해도 된다"고 컴파일러에게 알려주는 역할입니다.
prototype은 "원형", "시제품"이라는 뜻입니다. 제품을 만들기 전에 미리 만드는 시제품처럼, 함수의 전체 코드를 작성하기 전에 이름, 매개변수, 반환형만 미리 알려주는 것이 함수 프로토타입입니다.
프로토타입 없이 사용하는 경우 쌩기초
함수 정의가 호출보다 위에 있으면 프로토타입 없이도 정상 작동합니다. 컴파일러가 코드를 위에서 아래로 읽기 때문에, main에서 gamja를 호출할 때 이미 gamja를 알고 있습니다.
프로토타입이 필요한 경우 기초
함수 정의가 호출보다 아래에 있으면, 컴파일러가 함수를 모르기 때문에 프로토타입이 필요합니다.
프로토타입 작성 방법 기초
함수 정의에서 본문을 빼고 세미콜론(;)만 붙이면 됩니다.
| 구분 | 형태 | 본문 | 세미콜론 |
|---|---|---|---|
| 프로토타입 (선언) | int gamja(int a, int b); | 없음 | 있음 |
| 함수 정의 | int gamja(int a, int b) { ... } | 있음 | 없음 |
프로토타입과 헤더 파일 기초
printf, scanf 같은 표준 함수를 사용할 때 #include <stdio.h>를 작성하는 이유도 같은 원리입니다. stdio.h 헤더 파일에는 printf 등의 프로토타입이 들어 있어서, 컴파일러가 이 함수들을 알 수 있게 됩니다.
즉, #include는 다른 파일에 있는 프로토타입을 가져오는 것입니다.
Footnotes
-
컴파일러는 사람이 작성한 코드를 컴퓨터가 실행할 수 있는 형태로 번역하는 프로그램입니다. ↩