함수란 기능을 수행하는 코드 단위를 말한다. 지금까지 사용해왔던 main함수가 대표적인 함수이다.
printf와 scanf처럼 특정 기능을 미리 약속하고 프로그램에서 바로 사용할 수 있게 구현되어 있는 함수를 표준 라이브러리 함수라고 한다.
1. 함수 정의
함수를 사용하기 위해서는 먼저 함수를 정의해주어야 한다. 함수를 정의할 때에는 함수명, 매개변수, 반환형으로 이루어진 함수원형을 가지고 선언한다. 함수명은 함수기능에 적합한 이름(sum, odd...)으로 정한다. 매개변수는 함수가 기능을 수행하는 데 필요한 데이터(int, double...)로 넣어준다. 반환형은 함수가 수행된 후의 결과를 바탕으로 정해준다
반환형 함수명(매개변수1, 매개변수2)
{
//함수가 수행하는 명령, 결괏값을 돌려보냄
}
2. 함수 호출
함수를 만들었으면 그 함수를 호출해서 써야한다. 함수를 호출 할 때는 함수의 이름(인수) 형태로 호출한다. [sum(a,b) , sum(30,40)........]
입력된 인수는 호출된 함수의 매개변수에 복사되어 사용된다.
호출된 함수가 실행을 끝내면 return문을 사용해서 반환을 한다.(return 반환값;)
int sum(int x, int y)
{
int temp;
temp = x+y;
return temp;
}
3. 함수 선언
함수 선언은 컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 한다. 함수 원형에 세미콜론을 붙이면 함수 선언을 한 것이다.
int sum(int x, int y)
-> int sum(int x, int y);
함수 원형 -------------------> 함수 선언
매개변수가 없는 함수
- 키보드로 수를 입력하는 함수는 호출한 함수로부터 값을 받을 필요가 없으므로 매개변수도 필요하지않다.
int num(void)
<- 함수원형이다
반환값이 없는 함수
- 데이터를 받아서 단지 화면에 출력하는 함수라면 특별히 반환값이 필요하지 않다. 그럴 때는 반환형에 void를 넣어준다.
void print(char ch, int count);
<- 함수 선언
매개변수와 반환값 모두 없는 함수
- 매개변수와 반환값이 모두 없는 함수도 있다. 예를 들어 일정한 문자열을 여러 번 출력하는 함수라면 매개변수와 반환값이 모두 필요 없다. 이때, 매개변수와 반환형에 모두 void를 쓴다.
void print(void);
<- 함수 선언
재귀호출 함수
- 재귀호출 함수란 자기 자신을 호출하는 함수이다.
void fruit(void) { printf("apple\n"); fruit(); }
fruit함수를 호출해 실행하면서 계속해서 자기 자신을 호출한다.
재귀호출 함수는 최초 호출한 곳이 아닌 전에 호출했던 곳으로 돌아간다.
재귀호출 함수를 써서 자기 자신을 계속 호출하기 때문에 무한으로 출력될 것이라고 예상을 했겠지만 프로그램은 종료된다.
그 이유는 함수가 호출만으로도 일정 크기의 메모리를 사용하기 때문이다.
함수를 계속 출력하면 프로그램 하나가 쓸 수 있는 메모리를 모두 사용하게 된다. 그 때, 프로그램이 강제 종료된다.