c 언어/c 언어 문법

C 언어 함수

임베디드 친구 2024. 12. 13. 13:39
728x90
반응형

C 언어 함수

함수는 C 언어의 핵심 요소 중 하나로, 코드의 재사용성과 가독성을 높이고 프로그램의 구조를 체계적으로 만드는 데 중요한 역할을 합니다. 이번 글에서는 C 언어 함수의 개념부터 정의, 호출, 종류, 매개변수, 반환값, 재귀 함수, 그리고 예제까지 폭넓게 다루겠습니다.


1. 함수란 무엇인가?

함수(Function)는 특정 작업을 수행하는 코드 블록을 의미합니다. 함수를 사용하면 동일한 작업을 반복적으로 작성할 필요 없이, 코드의 재사용성을 높이고 유지보수를 간편하게 만들 수 있습니다.

함수의 주요 구성 요소

  • 함수 정의(Definition): 함수를 선언하고 구현하는 부분입니다.
  • 함수 호출(Call): 정의된 함수를 실행하는 부분입니다.
  • 매개변수(Parameter): 함수가 입력받는 데이터입니다.
  • 반환값(Return Value): 함수가 실행 후 반환하는 값입니다.

2. 함수 정의와 호출

함수 정의는 함수의 이름, 반환 타입, 매개변수, 그리고 실행할 코드 블록으로 구성됩니다.

함수 정의 문법

반환형 함수이름(매개변수 목록) {
    // 함수의 실행 코드
    return 반환값; // 반환값이 없는 경우 생략 가능
}

함수 호출 문법

함수이름(인수 목록);

예제: 간단한 함수 정의와 호출

#include <stdio.h>

// 함수 정의
int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(5, 3); // 함수 호출
    printf("5 + 3 = %d\n", result);
    return 0;
}

출력:

5 + 3 = 8

3. 함수의 종류

C 언어에서 함수는 크게 두 가지로 나뉩니다:

표준 라이브러리 함수

C 언어에서 제공하는 표준 함수들로, stdio.h, math.h 등의 헤더 파일에 정의되어 있습니다.

  • 예: printf, scanf, sqrt, strlen

사용자 정의 함수

프로그래머가 직접 작성한 함수입니다.

  • 예: int multiply(int a, int b)

4. 매개변수와 반환값

함수는 입력값(매개변수)을 받아 특정 작업을 수행하고 결과(반환값)를 반환합니다.

매개변수 전달 방식

  1. 값에 의한 전달(Call by Value): 매개변수로 값을 복사하여 전달.출력:
  2. x = 10 a = 5
  3. void printValue(int x) { x = 10; printf("x = %d\n", x); } int main() { int a = 5; printValue(a); printf("a = %d\n", a); return 0; }
  4. 참조에 의한 전달(Call by Reference): 포인터를 이용하여 원본 데이터를 전달.출력:
  5. a = 10
  6. void updateValue(int *x) { *x = 10; } int main() { int a = 5; updateValue(&a); printf("a = %d\n", a); return 0; }

반환값

반환값은 함수의 실행 결과를 돌려주는 역할을 합니다. 반환값이 없는 경우 void 키워드를 사용합니다.


5. 재귀 함수

재귀 함수(Recursive Function)는 자기 자신을 호출하는 함수입니다. 반복 작업을 구현할 때 유용하게 사용됩니다.

재귀 함수의 예: 팩토리얼 계산

#include <stdio.h>

int factorial(int n) {
    if (n <= 1) return 1; // 종료 조건
    return n * factorial(n - 1);
}

int main() {
    int result = factorial(5);
    printf("5! = %d\n", result);
    return 0;
}

출력:

5! = 120

주의: 재귀 함수는 종료 조건을 반드시 명시해야 무한 루프를 방지할 수 있습니다.


6. 함수 포인터

C 언어에서는 함수 자체를 포인터로 다룰 수 있습니다. 이를 통해 함수의 동적 호출이나 콜백 기능을 구현할 수 있습니다.

함수 포인터 예제

#include <stdio.h>

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

int subtract(int a, int b) {
    return a - b;
}

int main() {
    int (*operation)(int, int);

    operation = add;
    printf("5 + 3 = %d\n", operation(5, 3));

    operation = subtract;
    printf("5 - 3 = %d\n", operation(5, 3));

    return 0;
}

출력:

5 + 3 = 8
5 - 3 = 2

7. 함수 활용 사례

문자열 길이 계산 함수 구현

#include <stdio.h>

int stringLength(const char *str) {
    int length = 0;
    while (*str++) {
        length++;
    }
    return length;
}

int main() {
    const char *message = "Hello, World!";
    printf("Length of '%s' = %d\n", message, stringLength(message));
    return 0;
}

출력:

Length of 'Hello, World!' = 13

8. 마무리

이번 글에서는 C 언어 함수의 기초부터 고급 개념까지 살펴보았습니다. 함수는 프로그램을 효율적이고 구조적으로 만드는 데 필수적인 도구입니다.


참고 자료:

반응형