- 저자: MyungHoon-Jin
- #혼공단 #혼공C
- 직접 표로 핵심 포인트 정리 공유
구분 | 예시 | 설명 |
---|---|---|
함수 정의 | int sum(int a, int b){ return a + b; } |
함수의 형태를 알린다. 함수 원형에 세미콜론을 붙인다. |
함수 호출 및 반환 | sum(10, 20) |
함수를 만든다. 반환값의 형태, 이름, 매개변수를 표시하고 블록 안에 기능을 구현한다. |
함수 선언 | int sum(int a, int b); |
함수를 사용한다. 함수에 필요한 값을 인수로 준다. |
형태 | 구분 | 설명 |
---|---|---|
매개변수가 없는 경우 | 선언 | int get_num(void); 또는 int get_num(); |
특징 | 호출할 때 인수 없이 괄호만 사용한다. | |
반환형이 없는 경우 | 선언 | void print_char(char ch, int count); |
특징 | 반환할 때 return 문을 쓰지 않거나 return 문만 사용한다.호출 문장을 수식의 일부로 쓸 수 없다. |
|
반환형, 매개변수 모두 없는 경우 | 선언 | void print_title(void); |
특징 | 두 가지 경우의 특징을 모두 포함한다. |
형태 | 구분 | 설명 |
---|---|---|
재귀호출 함수 | 선언 | void fruit() { ... fruit() ... } |
특징 | 함수 안에 재귀호출을 멈추는 조건이 있어야 한다. |
- 198쪽 7-5 예제 테스트해보고 apple을 출력하다가 종료되는 사진 스크린샷.
- 왜 종료되는지도 함께 공유
#include <stdio.h>
void fruit(void); // 함수 선언
int main(void){
fruit(); // 함수 호출
return 0;
}
void fruit(void){ // 재귀호출 함수 정의
printf("apple\n");
fruit(); // 자신을 다시 호출
}
- Stack Overflow
- call stack 포인터가 stack bound를 초과했을 때 발생
- 함수는 호출만으로도 일정 크기의 메모리를 사용
- 무한 호출시 프로그램 하나가 쓸 수 있는 메모리(해당 프로세스에 할당된 스택 메모리)를 모두 사용하여 강제 종료
1부터 일정 수(n)까지의 합을 재귀호출을 사용해서 작성해보세요. 1부터 일정 수(n)까지의 합을 구하는 재귀호출 함수를 만들고 호출하여 구현합니다.
#include <stdio.h> // 표준 입출력 라이브러리
int rec_func(int n); // 함수 선언
void main(void){ // argument, return 전부 없음(void)
int n = 10; // 예제의 값 10 설정
int result; // 결과값을 저장할 변수 선언
result = rec_func(n); // n까지의 합을 구하는 함수를 실행
// result에 그 결과를 저장
printf("%d", result); // 결과 출력
}
int rec_func(int n){
if (n == 0) return 0; // 재귀 종료 조건 설정
int res = n; // 결과값을 저장할 변수 선언
// 근데 이렇게 해도 되려나?
// 누수되는 메모리가 존재하지 않을까?
// 아니면 스택해제되면서 알아서 정리하려나?
// 공부할게 많구만!!
res += rec_func(n - 1); // 재귀 호출하여 값을 저장
return res; // 결과값 반환
}
55