정처기 감자정처기 감자
C언어함수

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 사용자 정의 함수 기초

코딩C언어
읽는데 7분 소요
처음 쓰인 날: 2026-05-05
마지막 수정일: 2026-05-06
조회수: —
선수학습(2개)
  • C언어 자료형
  • 함수의 기초

요약

C언어 사용자 정의 함수의 정의, 호출, 선언(프로토타입) 3단계와 main에서의 호출 흐름을 정보처리기사 실기 기출문제(c_2026-1_11)와 함께 정리합니다.

이 페이지는 함수 기초를 읽고 오는 것을 전제로 합니다
함수의 정의·호출·매개변수·반환값·void 함수 같은 공통 개념은 함수 기초 페이지에서 다룹니다. 이 페이지는 그 위에 C 전용 내용(정의/호출/선언 3단계 프레임, 프로토타입, c_2026-1_11 패턴)만 얹어 정리합니다.

사용자 정의 함수 핵심 정리

단계설명예시
함수 정의함수의 동작을 작성하는 것int add(int a, int b) { return a + b; }
함수 호출정의된 함수를 실행하는 것add(3, 5)
함수 선언 (프로토타입)본문 없이 이름·매개변수·반환형만 적은 한 줄. 정의가 호출보다 아래에 있을 때만 필요int add(int, int);

사용자 정의 함수란?

함수의 기초에서 본 것처럼, C 프로그램은 항상 main 함수에서 시작합니다. 그리고 main 안에서 개발자가 직접 만든 함수를 호출할 수 있는데, 이렇게 직접 만든 함수를 사용자 정의 함수라고 합니다.

c
코드 하이라이팅 중…

프로그램 실행 흐름: main에서 시작 → add(3, 5) 호출 시 위쪽 add 함수로 점프 → return a + b;가 8을 반환하면 다시 main으로 돌아와 result에 저장 → printf로 출력.

main에서 add 함수로 점프했다가 반환값 8을 들고 돌아와 result에 저장되는 흐름
main → add → main 호출/반환 흐름. 호출 자리 add(3, 5)가 반환값 8로 치환됩니다.
종류설명
main 함수프로그램의 시작점. 모든 C 프로그램에 반드시 하나
사용자 정의 함수개발자가 직접 만든 함수. main에서 호출
라이브러리 함수printf, scanf처럼 표준 라이브러리에 이미 정의된 함수
왜 사용자 정의 함수를 쓰나요?
같은 코드를 반복해서 작성하는 대신 한 번 정의하고 여러 번 호출할 수 있습니다. 코드를 짧게 만들고, 비슷한 동작을 한곳에 모아 읽기 쉽게 합니다.

함수의 3단계 - 정의 / 호출 / (필요할 때) 선언

사용자 정의 함수를 사용하려면 정의 → 호출 두 단계만 있으면 충분합니다. 함수 정의가 main보다 아래에 있는 경우에만 선언(프로토타입)이 추가로 필요합니다.

1. 함수 정의

함수가 실제로 어떤 일을 하는지 작성하는 부분입니다.

c
코드 하이라이팅 중…
c
코드 하이라이팅 중…
구성 요소의미예시에서
반환형돌려주는 값의 자료형int
함수명함수의 이름add
매개변수외부에서 받는 입력값int a, int b
본문실제 동작return a + b;

2. 함수 호출

정의된 함수를 실행하는 부분입니다. 함수 이름 뒤에 괄호를 붙이고 인자(괄호 안에 적어 전달하는 값)를 전달합니다.

c
코드 하이라이팅 중…

add(3, 5)를 호출하면 a, b라는 새 변수가 만들어지고 거기에 3, 5가 각각 복사됩니다. 함수가 실행된 뒤 반환값 8이 add(3, 5) 자리에 들어가서 int result = 8;과 같아집니다.

multiply(4, 7) 호출 시 인자 4와 7이 매개변수 x, y에 복사되는 과정
인자가 매개변수로 복사되는 과정 — 호출 자리의 값이 새 변수에 복제되어 들어갑니다.

매개변수가 호출 인자를 어떻게 복사받는지, 반환값이 어떻게 호출 자리를 채우는지에 대한 상세 설명은 함수 기초 - 매개변수와 반환값을 참고하세요. 원본이 변경되지 않는 Call by Value도 함께 보면 좋습니다.

3. 함수 선언 (프로토타입) - 필요할 때만

함수 정의가 main보다 아래에 있으면, 호출 전에 본문 없이 이름·매개변수·반환형만 적은 한 줄(프로토타입)을 미리 적어줍니다.

c
코드 하이라이팅 중…

작성 방법, 헤더 파일과의 관계, 시험 출제 패턴은 함수 프로토타입 페이지에서 다룹니다.


매개변수 · 반환값 · void 함수

매개변수와 반환값의 동작 원리, 반환형 종류(int/double/char/void), void 함수와 return; 중간 종료는 함수 기초 페이지의 다음 섹션에서 다룹니다.

  • 매개변수와 반환값 - 인자가 매개변수에 복사되는 원리, return값이 호출 자리에 들어가는 흐름
  • 반환값이 없는 함수 - void 함수와 return;으로 중간 종료
  • Call by Value - 매개변수가 복사되므로 원본이 바뀌지 않는 이유

C에서 자료형별 반환형 선택(형변환, 정수/실수 나눗셈)이 헷갈리면 함께 읽어보세요.


main에서 함수 호출 흐름

여러 사용자 정의 함수가 있는 코드는 main부터 읽고, 함수를 만나면 그 정의로 이동해서 인자값을 매개변수에 대입한 뒤 분석합니다.

풀이 순서

  1. main부터 읽기 - 프로그램은 항상 main에서 시작합니다
  2. 함수 호출을 만나면 이동 - 호출된 함수의 정의로 이동합니다
  3. 인자값을 매개변수에 대입 - 실제 전달된 값을 매개변수에 넣고 분석합니다
  4. return값을 호출 위치에 대입 - 반환값을 호출한 자리에 넣고 계속 읽습니다
함수 호출 풀이 순서 4단계 다이어그램
main부터 시작 → 함수 호출 시 정의로 이동 → 인자값을 매개변수에 대입 → return값을 호출 위치에 대입 → 다시 main으로 복귀

정보처리기사 실기 대비 팁

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

정보처리기사 실기 기출 문제

문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(2개)
  • C언어 함수 프로토타입
  • 매개변수 전달 방식 (Call by Value)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999