2023. 7. 24. 00:50ㆍC언어/혼공학습단 10기
혼공단 - 혼자 공부하는 C언어(개정판)
# | 진도 | 기본 미션 | 선택 미션 |
4주차 (7/24 ~ 7/30) |
Chapter 07 | 함수의 유형을 정리하여 공유하기 | p. 226 7-5. 직접 해보는 손코딩 예제 테스트 후 apple 출력하고 종료한 화면 캡처하기 왜 무한대로 출력 되지 않는지 이유에 대해 생각하고 정리해보기 |
각 Chapter의 '학습목표'를 바탕으로 책의 내용을 정리했습니다.
□ Chapter 07
함수를 만들 때 중요한 함수 선언, 함수 정의, 함수 호출에 관한 이해
- 함수 선언: 프로그램의 상단에서 어떤 함수를 사용할 것이라고 컴파일러에 정보를 주는 역할 ( 함수의 형태를 미리 알릴 수 있음 )
. 함수 선언이 필요한 이유
① 함수 선언에서 반환값의 형태를 확인
② 함수에 호출 형식에 문제가 없는지 검사
- 함수 정의: 함수를 실제 코드로 만드는 것으로 함수의 기능을 구현
. 함수 정의를 위한 질문 ( 함수 원형 )
① 함수의 기능에 맞는 이름은 무엇인가? ( 함수명: 함수의 기능을 예상할 수 있는 적절한 단어 )
② 함수가 기능을 수행할 때 필요한 데이터는 무엇인가? ( 매개변수: 함수가 처리할 데이터를 저장하는 변수 )
③ 함수가 수행된 후의 결과는 무엇인가? ( 반환형: 함수가 기능을 수행한 후 호출한 곳으로 돌려줄 값의 자료형 )
- 함수 호출: 만든 함수를 사용하기 위해 호출 ( 함수의 이름을 사용하며, 필요한 데이터인 인수를 넣어줌 )
구분 | 예 |
설명 | ||
함수 선언 | int sum(int x, int y); |
함수의 형태를 알린다. 함수 원형에 세미콜론을 붙인다. |
||
함수 정의 | int sum(int x, int y) { return x + y; } |
함수를 만든다. 반환값의 형태, 이름, 매개변수를 표시하고 블록 안에 기능을 구현한다. |
||
함수 호출 | sum(10, 20); |
함수를 사용한다. 함수에 필요한 값을 인수로 준다. |
함수를 제어하는 return과 빈 공간을 나타내는 void에 관해 확인
- return문: 호출된 함수의 실행을 끝내고 호출한 곳으로 돌아가거나, 돌아가서 값을 반환할 때 사용
- void: 매개변수와 반환값이 없을 때 함수의 괄호 안에 적어둠
매개변수가 없는 함수, 반환값이 없는 함수, 재귀호출 함수 등 여러가지 함수 유형을 확인
- 매개변수가 없는 함수: 처리할 데이터를 스스로 입력하여 매개변수가 불필요한 함수
- 반환값이 없는 함수: 전달받은 데이터를 화면에 출력하는 함수 ( return문을 단독으로 사용하거나, 생략 가능 )
- 매개변수와 반환값이 모두 없는 함수: 같은 내용을 단지 화면에 출력하는 함수
- 재귀호출 함수: 함수 안에서 자기 자신을 다시 호출
. 복잡한 반복문을 경우에 따라 간단히 표현할 수 있으나, 코드 읽기가 어렵고 반복 호출되면서 메모리를 사용하므로 제한적으로 사용
형태 | 구분 | 실행 | ||
매개변수가 없는 함수 | 선언 | int get_num(void); 또는 int get_num(); |
||
특징 | 호출할 때 인수 없이 괄호만 사용한다. |
|||
반환값이 없는 함수 | 선언 | void print_char(char ch, int count); | ||
특징 | 반환할 때 return문을 쓰지 않거나 return문만 사용한다. 호출 문장을 수식의 일부로 쓸 수 없다. |
|||
매개변수와 반환값이 모두 없는 함수 | 선언 | void print_title(void); | ||
특징 | 2가지 경우의 특징을 모두 포함한다. | |||
재귀호출 함수 | 정의 | 정의 void fruit() { ... fruit() ... } | ||
특징 | 특징 함수 안에 재귀호출을 멈추는 조건이 있어야 한다. |
■ 기본 미션
함수의 유형을 정리하여 공유하기
1. 내장 함수 (Built-in Function): 기본적으로 제공되는 함수로 표준 라이브러리(stdio.h, math.h)에 정의되어 별도의 선언 없이 사용 가능 → 예) printf(), scanf(), strlen()
2. 사용자 정의 함수 (User-defined Function): 사용자가 직접 정의하여 만드는 함수로 프로그램의 특정 기능을 수행하기 위해 사용. 필요에 따라 매개변수나 반환값을 갖음
. 매개변수와 반환값에 따른 유형: 매개변수와 반환값을 조합하여 다양한 상황에 맞는 함수를 작성할 수 있으며, 함수의 목적과 요구사항에 따라 그 쓰임이 다름
① 매개변수와 반환값이 모두 없는 함수: 어떠한 입력도 결과도 받지 않으며, 주로 프로그램의 특정 동작을 수행하기 위해 사용 → 예: 화면에 특정 메시지 출력, 파일 생성
void greet() { printf("Hello, World!\n"); }
② 매개변수가 있고 반환값이 없는 함수: 한 개 이상의 매개변수를 받지만 어떤 결과도 반환하지 않으며, 주로 함수 내에서 매개변수로 전달된 값을 가공하거나 처리하기 위해 사용
→ 예: 두 개의 정수를 받아 더한 후 그 결과를 출력
void addNumbers(int a, int b) { int sum = a + b; printf("두 수의 합은 %d\n", sum); }
③ 매개변수가 없고 반환값이 있는 함수:어떠한 입력도 받지 않지만 결과값을 반환하며, 주로 계산 결과를 반환하거나 프로그램의 특정 상태나 값을 반환하는데 사용 → 예: 현재 시간을 반환
time_t getCurrentTime() { time_t currentTime = time(NULL); return currentTime; }
④ 매개변수와 반환값이 모두 있는 함수: 한 개 이상의 매개변수를 받고 처리한 결과를 반환하며, 주로 함수 내부에서 매개변수로 전달된 값을 가공하고 그 결과를 반환하는 데 사용 → 예: 두 개의 정수를 받아 더한 후 그 결과를 반환
int addNumbers(int a, int b) { int sum = a + b; return sum; }
■ 선택 미션
- p. 226 7-5. 직접 해보는 손코딩 예제 테스트 후 apple 출력하고 종료한 화면 캡처하기
. 왜 무한대로 출력 되지 않는지 이유에 대해 생각하고 정리해보기
: 함수가 재귀적으로 반복 호출되면서 메모리를 계속해서 사용하므로, 결국 프로그램이 쓸 수 있는 메모리를 모두 사용하게 되어 메모리 부족으로 강제 종료됩니다. 이는 컴파일러가 표시하는 경고 메시지로도 알 수 있습니다.
#include <stdio.h>
void fruit(void);
int main(void)
{
fruit();
return 0;
}
void fruit(void)
{
printf("apple\n");
fruit();
}
'C언어 > 혼공학습단 10기' 카테고리의 다른 글
혼자 공부하는 C언어(개정판) 6주차 (0) | 2023.08.14 |
---|---|
혼자 공부하는 C언어(개정판) 5주차 (0) | 2023.08.10 |
혼자 공부하는 C언어(개정판) 3주차 (0) | 2023.07.19 |
혼자 공부하는 C언어(개정판) 2주차 (2) | 2023.07.12 |
혼자 공부하는 C언어(개정판) 1주차 (0) | 2023.07.04 |