5.1 함수란

- 첫 번째 그림을 보면 상자에 x라는 값을 넣으면 뭔가 작동하고 y라는 값이 나옴.
- 예를 들어 36을 상자 안에 들어감. 그리고 상자 안에는 ☐ + 4라고 적혀 있음.
- 결과로는 입력한 36에 4를 더해 40이 나옴.
- 그림처럼 값을 입력받아 어떤 작업을 한 후 그 결과를 출력하는 것이 바로 함수.
✅ 함수
반환형 함수명(전달값); // 함수 선언
int main(void) {
함수명(전달값);
}
반환형 함수명(전달값) { // 함수 정의
// 수행할 문장
}
- 함수 선언을 하고 나면 함수가 어떤 일을 할지 정의하는데 이를 함수 정의라함.
- 함수 정의는 main() 함수 아래쪽에 작성.
- 함수 선언과 비슷하게 작성하면 되는데, 세미콜론은 빼고 main()을 작성할 때처럼 중괄호({})을 붙임.
- 중괄호 안에는 함수에서 수행할 문장을 넣음.
- 함수를 선언하고 정의했으면 main() 함수에 중복되는 부분을, 함수로 사용하도록 바꾸는데 함수를 사용한다는 것은 '함수에 어떤 값을 전달해 어떤 작업을 하라'고 명령하는 건데, 이를 함수호출이라고 함.
- 함수를 호출할 때는 함수명을 적고 소괄호 안에 전달한 값을 넣으면 됨.
- 함수 호출시 뒤에 세미콜론을 붙임.
✅ 사용자 정의 함수
- 표준 함수
- 이미 C언어에 이미 만들어져 있어서 프로그램을 작성할 때 형식에 맞춰 가져다 쓰기만 하면 됨.
- printf(), scanf(), rand() 함수 등이 대표적인 표준함수.
- 표준함수는 표준 라이브러리 함수, 내장 함수, 시스템 제공 함수라고도 함.
- 사용자 정의 함수
- 사용자가 직접 만들어(정의해) 사용하는 함수.
- 어떤 작업을 반복해서 사용해야 할 때 직접 만들어서 사용하는 함수.
- 함수를 실행한 결과로 반환하는 값을 반환값이라고 하고, 반환값의 자료형을 반환형이라고 함.
- 함수를 호출할 때 값을 전달하면 함수에서는 전달값을 변수로 받는데, 이 변수를 매개변수(parameter)라함.
- 전달값이 여러개인 경우 쉼표(,)로 구분하거나, 매개변수도 전달값의 개수에 맞춰 선언.
- 전달값과 매개변수는 자료형이 같아야 함.
// 함수선언
반환형 함수명(매개변수1, 매개변수2...);
void main(void) {
함수명(전달값1, 전달값2....); //함수호출
}
//함수정의
반환형 함수명(매개변수1,매개변수2...){(중략)}
- 함수를 사용하는 이유
- 코드의 중복을 방지하고 효율적으로 프로그래밍이 가능.
- 다른 프로젝트에 재사용할 수 있음.
5.2 함수의 종류
✅ 반환값이 없는 함수
#include<stdio.h>
void function_without_return(); // 함수 선언
int main(void) {
function_without_retrun(); // 반환값이 없는 함수 호출
return 0;
}
void function_without_return() { // 함수 정의
printf("반환값이 없는 함수입니다\n");
}
- 반환값이 없는 함수는 반환형을 void로 선언.
- 이처럼 반환값이 없는, void로 선언한 함수도 main() 함수에서 호출이 가능.
✅ 반환값이 있는 함수.
#include<stdio.h>
int function_without_return();
void p(int num); // 함수 선언
int main(void) {
ret = function_without_return(); // 반환값이 있는 함수 저장
return 0;
}
void function_without_return() { // 함수 정의
printf("반환값이 있는 함수입니다\n");
return 10;
}
- 반환값이 있는 함수는 어떤 작업을 처리한 후 그 결과를 반환.
- 결과는 return문으로 반환하고, 반환값은 함수를 호출한 곳에서 사용이 가능.
✅ 전달값이 없는 함수.
#include<stdio.h>
void function_without_params(); // 함수 선언
int main(void) {
function_without_params(); // 전달값이 없는 함수 호출
return 0;
}
void function_without_params() { // 함수 정의
printf("전달값이 없는 함수입니다\n");
}
- 전달값이 없는 함수를 호출할 때는 아무런 값도 전달하지 않음.
✅ 전달값이 있는 함수.
#include<stdio.h>
void function_without_params(int num1, int num2, int num3); // 함수 선언
int main(void) {
function_without_params(1,2,3); // 전달값이 있는 함수 호출
return 0;
}
void function_without_params(int num1, int num2, int num3) { // 함수 정의
printf("전달값이 있는 함수이고, 전달값은 %d, %d, %d입니다.\n",num1, num2, num3);
}
- 전달값이 있는 함수를 호출할 때는 1개 이상의 값을 전달하고, 함수에서는 이를 매개변수로 받음.
### ✅ 반환값과 전달값이 있는 함수.
- 2가지를 합쳐서 전달값도 있고 반환값도 있는 함수.
- 반환값과 전달값은 둘 다 없을 수도, 둘 다 있을 수도 있음.