특정한 작업(기능)을 수행하도록 설계된 독립적인 코드 블럭

clang

2 분 읽기

함수

정의

  • 특정한 작업(기능)을 수행하도록 설계된 독립적인 코드 블럭
  • 함수의 기능이 필요한 함수의 외부의 특정 지점에서, 해당 함수를 호출(call)해 사용한다.
  • C 프로그램은 함수를 기본 단위로 하여 구성된다.

문법

1
2
3
4
5
6
7
8
9
10
// 반환값이 있는 경우

// 선언 및 정의
ret_type func_name(param_type param_name, ...){
  statement ...
  return ret_expr;
}

// 사용 : 반환값이 있는 경우
ret_type var_name = func_name(param1, ...);
1
2
3
4
5
6
7
8
9
// 반환값이 없는 경우

// 선언 및 정의
void func_name(param_type param_name, ...){
  statement ...
}

// 사용
func_name(param1, ...);

함수의 선언과 정의

  • 함수의 선언은, 해당 함수의 이름과 반환 자료형, 매개변수의 자료형을 지정하여 컴파일러에게 알리는 것을 의미한다.
  • 함수의 정의는, 해당 함수가 내부적으로 어떤 작업을 수행할지 코드로 정의하는(구현하는) 것을 의미한다.
1
2
3
4
5
6
7
8
// 함수의 선언
int add_function(int a, int b);

// 함수의 정의
int add_function(int x, int y){
  int result = x + y;
  return result;
}

함수의 사용

1
2
3
4
5
6
7
8
9
int add_function(int x, int y){ //--- 2
  int result = x + y; //--- 3
  return result; //--- 4 & 5
}

void main(){
  int bn = 10;
  int result = add_function(bn, 20); //--- 1 & 5
}
순번 단계 설명
1 호출 함수를 호출하면서 함수에 인수(argument)를 전달한다.
2 매개변수 전달 전달된 인수가 매개변수(parameter)에 바인딩된다.
3 함수 실행 함수의 본문이 실행된다.
4 반환 return 문을 통해 값이 호출 지점으로 반환된다.
5 복귀 반환과 함께 프로그램의 실행 흐름이 함수를 호출했던 위치로 돌아온다.

함수의 장점

  • 작은 단위로 분할 : 크고 복잡한 프로그램을 작은 크기의 작업 단위로 분할해 구성할 수 있다.
  • 간결한 코드 : 이에 따라 간결하고 이해가 쉽고, 유지관리가 쉬운 코드를 작성할 수 있다.
  • 재사용성 : 잘 설계된 함수는 동일 기능이 필요한 곳에서 재사용될 수 있다.
  • 중복 최소화 : 같은 기능이 필요한 곳에서 재사용 함으로써 코드 중복을 최소화할 수 있다.

함수의 단점

  • 함수의 호출과 복귀 과정에서 부대비용이 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.	스택 프레임 생성·해제 비용
	•	함수 호출 시 → 지역 변수 공간 확보 & 반환 주소 저장하는 비용
	•	함수 종료 시 → 스택 프레임 제거 & 메모리 접근과 포인터 조작 비용

2.	인수 전달 비용
	•	인수를 레지스터 또는 스택에 복사하는 비용
	•	값 전달(call by value)의 경우 데이터 복사가 발생함.
	
3.	반환 처리 비용
	•	반환값을 레지스터 또는 메모리로 이동할 때의 비용과
	•	호출자 쪽 변수에 다시 저장할 때의 비용

4.	분기(branch) 및 파이프라인 손실
	•	함수 호출은 제어 흐름을 변경하는데, 이에 대한 비용.
	•	CPU 분기 예측 실패 시 파이프라인이 비워질 수 있다.

5.	레지스터 저장·복원 비용
	•	호출 규약(calling convention)에 따라
  → 일부 레지스터를 스택에 저장하고, 복귀 시 복원하는 비용

함수의 유형

  • 표준함수 : C 언어 자체에서 제공하는 함수
  • 사용자 정의 함수 : 사용자가 필요에 따라 특정 기능을 수행하도록 정의한 함수

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

// reading compass

이 글과 이어지는 경로

시리즈, 카테고리, 태그 겹침, 최신도를 점수화해 가까운 글일수록 중심에 배치합니다.

hover nodes or cards · click a node to pin
Next reads 0

    댓글 남기기