[C언어] 함수와 기억 클래스(1)

2025. 10. 15. 17:13·공부/⚙️C

✅ 1. 함수의 개념

(1) 함수(function) 란?

  • 함수란, 특정한 작업을 수행하도록 설계된 독립적인 코드 블록을 의미한다.
  • 함수에 코드 블록에 정의된 코드를 사용하기 위해서는 함수를 호출하여 사용할 수 있음.
  • 매개변수를 통해 함수에 데이터를 전달 할 수 있음.
  • 작업을 완료하면 호출한 곳으로 복귀 즉, return 을 하게 됨.
  • 복귀할 때 결과값을 반환할 수 있음.
  • C 프로그램은 함수를 기본 단위로 하여 구성이 됨.

(2) 함수의 특성

[ 함수의 장점 ]

  • 크고 복잡한 프로그램을 작은 크기의 의미 있는 작업 단위로 분할하여 구성할 수 있음.
  • 간결하고 이해하기 쉬우며 유지 관리가 쉬워질 수 있음.
  • 반복 사용되는 코드의 중복을 최소화 할 수 있음.
  • 잘 설계된 함수는 다른 응용에서 재사용할 수 있음.

[ 함수의 단점 ]

  • 함수 호출과 복귀 과정에서 부대비용이 추가될 수 있음.

(3) 함수의 유형

[ 표준함수 ]

  • C 언어 자체에서 제공하는 함수이며, 종류는 다양하다.
  • 입출력 및 파일 관련 함수
  • 문자열 처리 함수
  • 메모리 관련 함수
  • 수학 함수
  • 그 밖에 다양한 유틸리티 함수 등이 있음.

[ 사용자 정의 함수 ]

  • 사용자의 필요에 따라 특정 기능을 수행하도록 정의되는 함수이다. 즉, 직접 만들어서 이용하는 것임.

✅ 2. 표준 함수

(1) 표준 함수란?

  • C 언어에서 프로그램 작성에 필요한 기본 기능을 제공하기 위해 제공된 함수의 집합이다.
  • 이 표준 함수는 표준 라이브러리 형태로 제공이 된다.
  • 각 함수의 원형을 기능별로 헤더파일로 제공을 함.
  • 함수의 원형: 함수를 사용하는 데 필요한 사항을 미리 선언하는 문장
  • 쉽게말해, 미리 정의 된 함수를 사용하기 위해 함수의 이름, 매개변수, 반환값의 자료형을 코드에 넣어서 선언하는것임.
  • 필요한 표준함수의 원형이 선언되어 있는 헤더파일을 미리 포함(#include)해야 함.

(2) 주요 표준함수

 

(3) 표준함수의 사용 예시

  • C 에서 제공해주는 math 헤더 파일 내에 존재하는 함수를 호출해 활용한 예시이다.

✅ 3. 사용자 정의 함수

(1) 함수의 정의

  • 위와 같은 형식으로 사용자 함수를 정의 할 수 있음. C 가 제공해주는 표준 함수 또한 내부에는 이런식으로 되있음.
  • 함수 헤더: 반환 자료형, 함수명, 매개변수 리스트를 차례로 작성 ( 블록 위에 함수 정의 내용 부분 )
  • 함수 몸체: 함수가 처리할 작업을 정의하는 문장을 나열 할 수 있음. ( 블록 내부를 의미 )

(2) 함수의 호출 및 반환

  • 함수의 이름과 인수를 제공하여 호출 할 수 있으며, 반환 타입을 알맞게 정해서 받아줘야 함. return 타입
  • 실 매개변수: sum(x, y) 부분의 함수를 호출 할 때 넣는 매개변수를 의미함
  • 형식 매개변수: sum(int a, int b) 부분의 함수를 호출하면 들어가는 함수의 매개변수를 의미함.
  • 함수 헤더에 자료형을 넣게 되면, 해당 자료형에 맞도록 return 을 써서 결과값을 반환 할 수 있음.
  • 그러면, 호출하는 쪽에서 올바른 자료형에 맞는 변수로 값을 받아야 함.

(3) 함수의 원형

#include <stdio.h>

int sum(int a, int b); // 함수의 원형

int main() {
    int result = sum(1, 2);
    printf("%d", result);
}

int sum(int a, int b) {
    return a + b;
}
  • 함수의 원형은 함수를 실제로 정의하기 전에, 컴파일러에게 사용 할 함수를 미리 알려주는 선언문임.
  • 예시 코드를 보면, main() 함수 밑에 sum() 함수가 정의되어 있기 때문에 main() 함수에서는 sum() 을 호출해도 sum() 이 정의가 되어있지 않으므로 모름 즉, 컴파일 오류가 뜰 수 있음.
  • 하지만, int sum(int a, int b); 와 같이 함수의 원형인 함수의 선언문을 작성하게 된다면 해당 함수가 어느 코드라인에 있던 호출이 가능해짐.
#include <stdio.h>

int sum(int a, int b) {
    return a + b;
}

int main() {
    int result = sum(1, 2);
    printf("%d", result);
}

 

  • 반대로 생각해보면 sum() 함수가 main() 함수 위에 정의가 되어있다면, 함수의 원형 -> 선언문 없이 호출이 가능함.

  • 또한, 헤더 파일(mymath.h)에는 인터페이스 처럼 함수를 정의해 둘 수 있고, 구현 c 확장자를 가지는 구현 파일(mymath.h)을 만들어서 해당 함수를 정의 해서 사용을 할 수 있음.
  • 이때, main() 함수에서는 mymath.h 헤더 파일을 include 함으로써, 함수 선언문을 가지고와서 함수를 사용 할 수 있음.
  • 만약 mymath.c 와 같이 구현 파일이 존재하지 않는다면 main() 함수에서 직접 구현을 해줘야함.
  • mymath.c 와 같이 구현 파일이 존재하면 main() 에서는 단순히 mymath.h 의 선언된 함수만 호출하면 됨.

✅ 4. 정리하기

  • 함수는 함수 헤더와 몸체 블록으로 구성이 됨.
  • 함수의 헤더에는 반환타입, 함수명, 매개변수를 정의해야 함.
  • 함수의 몸체 블록에는 함수의 코드를 작성하면 됨. 반환 타입이 있는 경우 return 값을 올바르게 넘겨줘야함.
  • 모든 함수는 사용되기 전에 미리 선언을 해야함. 이 선언문이 함수의 원형으로 볼 수 있음.
  • 하나의 프로그램 내에서는 2개 이상의 함수가 동일한 이름을 가질 수 없음.

'공부 > ⚙️C' 카테고리의 다른 글

[C언어] 배열과 포인터(1)  (0) 2025.10.16
[C언어] 함수와 기억 클래스(2)  (0) 2025.10.15
[C언어] 선택 제어문과 반복 제어문  (0) 2025.10.13
[C언어] 입출력 함수와 연산자(2)  (0) 2025.10.03
[C언어] 입출력 함수와 연산자(1)  (0) 2025.09.05
'공부/⚙️C' 카테고리의 다른 글
  • [C언어] 배열과 포인터(1)
  • [C언어] 함수와 기억 클래스(2)
  • [C언어] 선택 제어문과 반복 제어문
  • [C언어] 입출력 함수와 연산자(2)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    운영체제
    방송대
    배열
    자료구조
    컴퓨터의 이해
    방통대
    그래프
    Java
    함수
    자바
    Python
    spring
    컴퓨터과학 개론
    유비쿼터스
    방송통신대학교
    C언어
    파이썬
    알고리즘
    컴퓨터과학과
    이산수학
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[C언어] 함수와 기억 클래스(1)
상단으로

티스토리툴바