Index
함수의 개념과 호출 구조, 재귀 호출
- 함수의 개념
- Function Definition
- void Function / Procedure
- Function Call Structure : Call Number / Call Depth
- Recursive Call
1. 함수의 개념
✓ 함수(Function)?
- 함수: 상자 수; 상자에 수를 넣으면 수가 나옴
- 입력 값을 넣으면 출력값이 나오는 (Black) Box
✓ C 언어와 함수
- C 언어는 크고 복잡한 일을 여러 개의 함수로 나눠 해결하는 것을 핵심 프로그램 원리로 한다
- 함수는 C 소스 코드의 핵심 구성 요소이며 소스 코드 규모와 관련 없이 하나 이상의 함수 정의(Funciton)으로 구성된다
2. Function Definition
- Header와 Body로 구성
- Header
- 함수가 반환하는 값의 Type
- 함수 의 이름/식별자
- 함수 호출에 필요한 인자/매개변수 목록
✓ Return 문과 Return Type
- 형식: return expression;
- 함수가 어떤 값을 돌려주는지 명시함
- 리턴 값(return value)은 수식으로 주어지는데 수식에 괄호를 사용하면 이해하기 쉽다.
- 리턴 값의 자료형은 리턴 타입(return type)과 일치해야 한다
✓ Function Call
함수 호출(Function Call)
- "함수 이름(매개 변수 수 만큼의 , 로 구분된 입력 값)"
함수 호출 시 ( )안의 변수 또는 expression 값이 매개변수로 복사 됨
- 변수 자체가 함수로 전달되는 것이 아님
- 참고) 이런 함수 호출 방식을 "Call by Value"라고 하며 C언어의 중요한 특징
- Call by Reference와 구별
- 함수 내에서 매개변수의 값이 변하더라도 함수 호출 시 사용한 변수에는 변화가 없음
3. void Function / Procedure
✓ 함수의 형태
Return 값이 없는 함수도 있다
- Return Type로 void를 쓴다
- void function 또는 procedure라고 부른다
- 결과 값 없이 함수 내에서 이뤄지는 부가적 효과 (Side Effect) 만을 이용하여 작업을 수행
- 부가적인 효과의 예: 값의 출력;
- return 문이 없거나 인자 없이 return을 쓴다
- return문이 없으면 함수 Body의 끝에 도착하면 return 한다
인자가 없는 함수도 있다
- 함수 정의 시 매개변수란에 void를 쓴다
- 함수 호출 시에는 빈괄호를 사용하면 된다
- int main(void)에서 void는 인자가 없는 함수를 의미한다
✓ 함수에서 다양한 반환 값 처리
4. Function Call Structure : Call Number / Call Depth
✓ 함수의 호출 구조 - 단일 호출
① 기본적인 방식
- 호출자 함수 A는 함수 B를 호출하면 수행을 멈춘다
- 호출된 함수 B는
- return 문을 만나거나
- 함수 몸체 끝에 도달할 때까지 수행한다
- 호출된 함수 B의 수행이 끝나면 호출 지점 바로 다음으로 복귀하여 호출자 함수 A의 수행을 재개한다
② 복귀 지점
- 복귀 지점은 문장 단위가 아닐 수 있다
③ 호출 구조 분석
- Call Depth: 함수 호출 깊이
- Call Number: 함수의 호출 번호(순서)
✓ 함수의 호출 구조 - 함수 내 함수 호출
✓ 함수의 호출 구조 - 연속 호출
5. Recursive Call
- Recursive call (재귀 호출)
- 어떤 함수가 종료되지 않은 상황에서 자신을 다시 호출하는 것
- Recursive function (재귀 함수): Recursive call을 이용하는 함수
✓ Recursive Funcion 예
요약
'Language Study > C' 카테고리의 다른 글
[C/C++] 07 - 01 함수와변수,함수인자심화학습 (0) | 2022.10.25 |
---|---|
[C/C++] 04 - 함수 기초 - 함수 선언과 변수 유효 범위 (1) | 2022.10.03 |
[C/C++] 03 - 제어 구조 기초 - 반복문과 배열 기초 (0) | 2022.10.03 |
[C/C++] 03 - 제어 구조 기초 - 제어 구조(Control)와 조건문 기초 (0) | 2022.10.03 |
[C/C++] 02 - 자료형과 연산 기초 (0) | 2022.10.02 |