함수
정의
- 특정한 작업(기능)을 수행하도록 설계된 독립적인 코드 블럭
- 함수의 기능이 필요한 함수의 외부의 특정 지점에서, 해당 함수를 호출(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 프로그래밍 강의 (방송통신대 - 이병래)
Comments