48 – 함수 정의

함수가 실행할 내용이 실제로 존재하는 부분이 바로 함수 정의며, 그 형식은 main 함수를 지겹게 써봐서 알겠지만 다음과 같이 좀 체계적으로 살펴보도록 하겠다. 일단 함수의 형식은 다음과 같다.

[데이터형] [함수이름]([매개변수들])
{
….
[문장들];
….
return [반환값];
}

함수 이름을 작성하는 방법은 변수 이름을 작성하는 방법과 같고, 함수의 영역은 중괄호( { } )로 표시한다. 그런데 이 때 중괄호 안에 다른 함수의 중괄호를 사용하면 안 되는데, 그 이유는 프로그램에서 정의되는 함수는 각각 독립적으로 존재하기 때문이다. 함수를 정의하는 데 꼭 필요한 것은 함수 이름뿐이고, 나머지는 생략이 가능하므로 가장 간단한 함수의 정의는 다음과 같은 구조이다.

[함수이름]()
{
}

함수 이름 앞의 데이터형은 그 함수가 반환하는 값의 데이터형을 의미한다. 그러므로 정수값을 반환하면 int를, 문자값을 반환하면 char를 적어준다. int형 값을 반환한다면 반환하는 함수의 예시는 다음과 같다.

int add_one(int number)
{
return number+1;
}

return은 값을 반환하는데, return에 반환값의 형은 함수에 반환하는 데이터형과 일치해야 한다. 반환하는 형식은 다음과 같다.

return;
return 수식;
return (수식);

수식이 없는 것은 반환값이 없는 함수고, 이때는 함수의 실행만 종료시킨다는 것을 의미하는데, 수식을 작성할 때는 수식을 괄호로 둘러싸도 되고 그러지 않아도 상관없다. 그리고 반환값이 없을 경우에는 데이터형이 들어갈 자리에 void를 명시하는데, void를 생략할 수도 있지만 명시하면 값을 반환하지 않는 함수라는 것을 명확히 밝히는 것이므로 void를 작성하는 것이 더 바람직하다.

void no_return(int num)
{
printf(“num: %d”,num);
}

그리고 매개변수를 통해 함수끼리 데이터를 주고받을 수 있는데, 매개변수는 데이터형과 변수 이름으로 구성된다. 아래에서는 number가 매개변수가 된다.

int function(int number)
{

}

매개변수는 콤마로 분리해 다음과 같이 여러 개를 지정할 수도 있다.

int subtract(int num1, int num2)
{
return num1-num2;
}

없을 경우에는 생략해도 된다. 그런데 이때도 void를 써주면 매개변수가 없다는 것을 명확히 해주므로 명시하는 것이 좋다.

void function(void)
{
printf(“function”);
}

물론 함수의 정의가 함수 호출 앞에 나오는 경우에는 함수 선언을 생략해도 되지만 한 프로그램에서 이용하는 함수가 많거나, 함수들간에 서로 호출할 때에는 함수 호출보다 먼저 정의하는 것이 쉽지 않다. 그러므로 대부분의 프로그램에서는 함수 선언을 이용한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.