C언어 사용자 정의 함수 기초
요약
C언어 사용자 정의 함수의 정의, 호출, 선언(프로토타입) 3단계와 main에서의 호출 흐름을 정보처리기사 실기 기출문제(c_2026-1_11)와 함께 정리합니다.
사용자 정의 함수 핵심 정리
| 단계 | 설명 | 예시 |
|---|---|---|
| 함수 정의 | 함수의 동작을 작성하는 것 | int add(int a, int b) { return a + b; } |
| 함수 호출 | 정의된 함수를 실행하는 것 | add(3, 5) |
| 함수 선언 (프로토타입) | 본문 없이 이름·매개변수·반환형만 적은 한 줄. 정의가 호출보다 아래에 있을 때만 필요 | int add(int, int); |
사용자 정의 함수란? 쌩기초
함수의 기초에서 본 것처럼, C 프로그램은 항상 main 함수에서 시작합니다. 그리고 main 안에서 개발자가 직접 만든 함수를 호출할 수 있는데, 이렇게 직접 만든 함수를 사용자 정의 함수라고 합니다.
프로그램 실행 흐름: main에서 시작 → add(3, 5) 호출 시 위쪽 add 함수로 점프 → return a + b;가 8을 반환하면 다시 main으로 돌아와 result에 저장 → printf로 출력.

| 종류 | 설명 |
|---|---|
main 함수 | 프로그램의 시작점. 모든 C 프로그램에 반드시 하나 |
| 사용자 정의 함수 | 개발자가 직접 만든 함수. main에서 호출 |
| 라이브러리 함수 | printf, scanf처럼 표준 라이브러리에 이미 정의된 함수 |
함수의 3단계 - 정의 / 호출 / (필요할 때) 선언 쌩기초
사용자 정의 함수를 사용하려면 정의 → 호출 두 단계만 있으면 충분합니다. 함수 정의가 main보다 아래에 있는 경우에만 선언(프로토타입)이 추가로 필요합니다.
1. 함수 정의
함수가 실제로 어떤 일을 하는지 작성하는 부분입니다.
| 구성 요소 | 의미 | 예시에서 |
|---|---|---|
| 반환형 | 돌려주는 값의 자료형 | int |
| 함수명 | 함수의 이름 | add |
| 매개변수 | 외부에서 받는 입력값 | int a, int b |
| 본문 | 실제 동작 | return a + b; |
2. 함수 호출
정의된 함수를 실행하는 부분입니다. 함수 이름 뒤에 괄호를 붙이고 인자(괄호 안에 적어 전달하는 값)를 전달합니다.
add(3, 5)를 호출하면 a, b라는 새 변수가 만들어지고 거기에 3, 5가 각각 복사됩니다. 함수가 실행된 뒤 반환값 8이 add(3, 5) 자리에 들어가서 int result = 8;과 같아집니다.

매개변수가 호출 인자를 어떻게 복사받는지, 반환값이 어떻게 호출 자리를 채우는지에 대한 상세 설명은 함수 기초 - 매개변수와 반환값을 참고하세요. 원본이 변경되지 않는 Call by Value도 함께 보면 좋습니다.
3. 함수 선언 (프로토타입) - 필요할 때만
함수 정의가 main보다 아래에 있으면, 호출 전에 본문 없이 이름·매개변수·반환형만 적은 한 줄(프로토타입)을 미리 적어줍니다.
작성 방법, 헤더 파일과의 관계, 시험 출제 패턴은 함수 프로토타입 페이지에서 다룹니다.
매개변수 · 반환값 · void 함수 쌩기초
매개변수와 반환값의 동작 원리, 반환형 종류(int/double/char/void), void 함수와 return; 중간 종료는 함수 기초 페이지의 다음 섹션에서 다룹니다.
- 매개변수와 반환값 - 인자가 매개변수에 복사되는 원리, return값이 호출 자리에 들어가는 흐름
- 반환값이 없는 함수 - void 함수와
return;으로 중간 종료 - Call by Value - 매개변수가 복사되므로 원본이 바뀌지 않는 이유
C에서 자료형별 반환형 선택(형변환, 정수/실수 나눗셈)이 헷갈리면 함께 읽어보세요.
main에서 함수 호출 흐름 기초
여러 사용자 정의 함수가 있는 코드는 main부터 읽고, 함수를 만나면 그 정의로 이동해서 인자값을 매개변수에 대입한 뒤 분석합니다.
풀이 순서
main부터 읽기 - 프로그램은 항상main에서 시작합니다- 함수 호출을 만나면 이동 - 호출된 함수의 정의로 이동합니다
- 인자값을 매개변수에 대입 - 실제 전달된 값을 매개변수에 넣고 분석합니다
- return값을 호출 위치에 대입 - 반환값을 호출한 자리에 넣고 계속 읽습니다

정보처리기사 실기 대비 팁 기초
main부터 읽기: 함수 정의가 위에 길게 있어도 먼저main을 읽고, 호출되는 순서대로 함수로 이동하면서 분석합니다- 인자 → 매개변수 복사: 호출 시 전달한 값이 매개변수에 그대로 복사된다는 점이 핵심입니다 (Call by Value)
- 반환형 확인:
int인지double인지void인지에 따라 출력 서식 지정자(%d,%f, 출력 자체)가 달라집니다 - 배열 매개변수 표기:
int p[]와int *p는 동일하므로, 표기가 다르다고 다른 동작이라고 오해하지 않기 (포인터 산술)