함수는 크게 사용자정의함수와 라이브러리 함수가 있다.
라이브러리함수로는, stdio.h 의 printf 나 scanf 같은, 미리 정의되어 있는 함수들이
있다.
또한, 사용자 정의 함수로는 main 외에 사용자가 새롭게 정할 수 있는 함수가 존재한다.
함수가 필요한 이유는, 우리가 프로그램을 작성할때 main 함수 안에서 모든것을 작성할 수도 있다.
하지만, 프로그램이 돌아가는 구조나, 남들이 볼때 매우 힘들고 비효율적이라고 생각한다.
예를들어 뭔가를 조립한다고 했을때, 각 부품 부품을 만들어 조립하는것이다.
또한, 이렇게 하면 고장난 부분만 교체하여 주면 된다.
이처럼 함수는 각 부분이라고 생각할 수 있다.
함수들을 정의하는방법은 다음과 같다.
반환형 함수명(인자)
{
내용
리턴값
}
ex)
int my_strlen(char a[])
{
int i= -1;
int count=0;
while(a[++i])
count++;
return count;
}
위 코드는 string.h 의 strlen 이라는 함수를 흉내낸것이다.
이처럼 사용자가 새로이 함수를 정의할 수 있다.
함수에는 프로토타입이란것이 존재한다.
그 프로토타입은 main 함수위에 쓰는것인데, 반환형 이름(인자);
만 해주면 된다.
이것을 하는 이유는, 자신이 선언한 함수의 인자가 맞는지, 또는 반환값이 다른지 등을 검사하여 오류를 없애기 위함이다.
함수를 호출하는 방법은 다음과 같다.
(위 예시의 my_strlen 이 선언되어있다고 가정한다.)
#include <stdio.h>
int my_strlen(char a[]);
int main(void)
{
char a[] = "abcde";
int d = my_strlen(a);
printf("%d", d);
}
int d = my_strlen(a); 에서,
my_strlen 이 호출되어 그 내용이 실행되고, 5라는 값을 반환하여 d에 넣고,
d라는 변수가 가진값인 5를 printf로 출력한다.
함수를 사용하는 이유는 모듈화가 되어 편리하고 다시쓰기 용이하기 때문이다.