C언어 함수(Function) 마스터하기

프로그램을 구성하는 기본 단위인 함수의 선언부터 호출, 반환까지 체계적으로 학습합니다.

💡 1. 함수의 개념

함수는 특정 작업을 수행하도록 설계된 독립적인 코드 블록입니다. 재사용성이 높아지고 코드가 깔끔해집니다.

Input 매개변수
함수 (Function)
코드의 집합
Output 반환값

🏗️ 2. 함수의 기본 구조

// 함수의 정의 (Function Definition)
int add(int a, int b) {
    int sum = a + b; // 함수 몸체 (Body)
    return sum; // 결과 반환
}

📜 3. 함수의 선언(Declaration)과 정의(Definition)

컴파일러에게 함수의 존재를 미리 알리는 것을 선언(원형, Prototype)이라고 합니다.

// 1. 함수 선언 (상단)
int add(int a, int b);

int main() {
    add(3, 5); // 호출 가능
}
// 2. 함수 정의 (하단)
int add(int a, int b) {
    return a + b;
}

🔄 4. 함수 호출과 실행 흐름

함수가 호출되면 현재 위치를 기억하고 함수의 코드로 점프합니다. 스택(Stack) 메모리에 정보가 쌓입니다.

코드 실행 흐름

1: int main() {
2:     int x = 10;
3:     int result = func(x); // 호출!
4:     printf("%d", result);
5:     return 0;
6: }

7: int func(int n) {
8:     return n * 2;
9: }

콜 스택 (Call Stack)

[Stack Bottom]
시스템 대기 중...

🚚 5. 매개변수 전달 (값에 의한 호출)

C언어에서 함수로 인자를 전달하면 값이 복사되어 전달됩니다. 함수 내부에서 매개변수를 바꿔도 원본은 안전합니다.

메인 함수 (main)

50 변수 x
대기 중

함수 내부 (func)

? 매개변수 n

💎 6. 반환값 (Return Value)

함수의 실행이 끝나면 `return` 키워드를 통해 결과를 호출자에게 돌려줍니다.

함수 실행 완료
결과값: 100
? Result

메인 함수로 전달

🌐 7. 변수의 범위 (Scope)

변수가 프로그램의 어느 부분에서 접근 가능한지를 범위(Scope)라고 합니다.

int global_var = 100; // 전역 변수

void func() {
    int local_f = 20; // func의 지역 변수
    global_var += 10; // 접근 가능!
}

int main() {
    int local_m = 50; // main의 지역 변수
    func();
}
전역 범위 (Global Scope)
global_var: 100
main() 지역
local_m: 50
func() 지역
local_f: 20

🔄 8. 재귀 함수 (Recursion)

함수가 자기 자신을 다시 호출하는 것을 재귀라고 합니다. 종료 조건이 반드시 필요합니다!

팩토리얼 (Factorial) 코드

int fact(int n) {
    if (n <= 1) return 1; // 종료 조건
    return n * fact(n - 1); // 재귀 호출
}

상태: 대기 중 (fact(3) 계산 시뮬레이션)

재귀 콜 스택 (Recursive Call Stack)