본문으로 건너뛰기

함수의 선언과 호출 원리

함수(Function)

  • 특정 작업을 수행하는 독립된 코드 블록이다.
  • 프로그램의 구조화와 재사용성을 높인다.

한번 정의하고, 여러 번 호출할 수 있음

void say_hello() {
printf("Hello, World!");
}

선언(Declaration)과 정의(Definition)

  • 선언: 함수의 존재와 형태를 알린다.(프로토타입)
  • 정의: 함수의 구체적인 내용을 알린다. (구현)

선언은 주로 헤더 파일(.h)
정의는 주로 소스 파일(.c)

void say_hello(); // 선언

void say_hello() { // 정의
printf("Hello, World!";)
}

매개변수(Parameter)와 인자(Argument)

  • 매개변수: 함수 선언부와 정의부에 적힌 변수
  • 인자: 함수를 호출할 때 넘기는 실제 값

매개변수는 함수 안에서 지역변수처럼 동작
매개변수에 대한 타입을 지정해야 한다.

void repeat_message(int n) { // n은 int형 매개변수
for (int i = 0; i < n; i++) {
printf("C Language!\n");
}
}

int main() {
repeat_message(2); // 2는 인자
}

반환(Return)

  • 함수는 값을 반환할 수 있으며, 반환 타입을 지정해야 한다.

반환 타입이 void이면 아무것도 반환하지 않음

int add(int a, int b) {
return a + b; // int형 값 반환
}

함수 호출(Call)의 동작 흐름

  1. 현재 실행 중인 위치(복귀 주소) 스택에 저장
  2. 인자들을 스택에 저장
  3. 함수로 제어권 이동
  4. 함수 종료 후, 스택에 저장해둔 복귀 주소로 돌아감

이 과정을 콜 스택(Call Stack)이 관리

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

int main() {
int result = add(2, 3);
return 0;
}

콜 스택 변화