본문 바로가기

C Language/Programming Course

5장 함수(4부 함수의 사용예제) 첫번째 시간


5장 함수

4부 함수의 사용 예제

 

이번시간에는 실제적으로 함수 사용하는 것을 보고 함수를 사용함에 있어서
조금이나마 거리감을 줄이기 위해서 함수의 사용 예제 파트를 만들었습니다.

예제 형식은 함수를 첫번째 함수에 대해서 설명할때 처럼 메인에 모든 소스를
적고 나서 그 소스들을 함수화 시키는 형식으로 설명 드리겠습니다.

============================================================

#include <stdio.h>

void main(void)
{
    int input = 0;
    int output = 0;

    printf("제곱 값을 알고 싶은 숫자를 적으시오 : ");
    scanf("%d", &input);

    output = input * input;
    printf("%d의 제곱 값은 %d 입니다. \n",input, output);

}
============================================================

위 소스를 가지고 설명을 드리겠습니다. 일단 함수로 분리 하기에 앞서
어느 부분을 main문에 두고 어느 부분을 함수로 빼야 되는지 부터 고민해 봐야 합니다.
하지만 이 부분은 저번 시간에 한 구슬 문제에서 처럼 작업 대로 빼면 됩니다.
즉, 여기에서의 작업은 제곱하는 작업을 함수로 만들면 되는 것입니다.
그리고 입력받고  출력하는 부분도 하나의 작업이라면 작업인데, 이 부분에 대해서는
특별히 길거나 복잡하지 않다면, main문에 두더라도 괜찮습니다. 

그럼 이정도를 이해 하시고 먼저 함수화를 시켰을때 먼저 생각해야 될때,
이 함수에서 나오는 결과값을 어떻게 main으로 돌려 주는 가 입니다.
방법은 두가지가 있습니다. 리턴값으로 주던지 주소참조를 시킨 변수를 가지고 와서
거기에다가 결과를 넣든지, 하지만 주소참조를 시킨 변수 라는 것 아직 배우지 않았기 때문에
현재는 리턴값으로만 주도록 하겠습니다. 그리고 그 리턴값의 자료형은 int형으로 두겠습니다.
그리고 이 결과를 넘길 것을 생각 한 뒤에는 함수 이름을 생각하시면 됩니다. 이 함수 이름은
하는 작업과 비슷하게 짓는 것이 알기 쉽기 때문에 보통 그렇게 짓습니다. 그럼 함수 명은
Square로 두겠습니다.

그리고 생각해 보아야 되는게 이 함수가 작업을 하기 위해 필요한 값을 받아야 하는데,
이 값을 받을 변수를 정해줘야 합니다. 일단 입력 값 한개만 있으면 되기에 int형으로
input이라는 변수를 만들겠습니다.

여기에서 input과 main에 있는 input는 서로 관계가 없습니다.
그 이유는 두개다 지역변수이기 때문에 서로관여를 안합니다.
그럼 함수의 형태가 

int Square(int input)

 이라는 함수형태가 만들어 질겁니다.
 
이 함수 형태를 완전하게 만들면,

============================================================
int Square(int input)
{
    int output = 0;
    output = input * input;  

    return output;
}
============================================================ 

이런 식으로 만들어 지겠죠!?
그럼 위 main문에서는  

output = input * input; 

이 문장에서

output = Square(input);

이런식으로만 바뀌면 됩니다.
전체 소스를 보겠습니다.  

============================================================
#include <stdio.h>

int Square(int input);

void main(void)
{
    int input = 0;
    int output = 0;   

    printf("제곱 값을 알고 싶은 숫자를 적으시오 : ");
    scanf("%d", &input);

    output = Square(input);

    printf("%d의 제곱 값은 %d 입니다. \n",input, output);
} 

int Square(int input)
{
    int output = 0;
    output = input * input;  

    return output;
}
============================================================ 

이런식으로 하면 되겠습니다.
그럼 여기에서 또 궁금한 점이 생길 겁니다.
main문 위에 int Square(int input); 을 왜 적었느냐가 궁금할껀데 이는

일단 c언어는 main문 부터 찾아서 main문 부터 돌려 보게 됩니다.
그 찾는 방법은 시작 하는 첫째줄 부터 차례대로 내려가면서 찾게 됩니다.
그래서 main문을 찾으면 거기서 부터 차례대로 컴파일을 시키고 main문이 종료하게
되면 프로그램이 종료하게 됩니다.

그러므로 만약 int Square(int input);을 main위에 적어 두지 않으면,
컴파일러는 main문만 보기 때문에, int Square(int input) 함수가 있다는 것을
인지 하지 못하고, 이 함수가 쓰이는 부분을 에러로 처리 해 버립니다.

그러므로 int Square(int input) 함수가 있다는 것을 인지 시켜 두고,
이 함수를 사용하는 부분이 있으면 main문이 끝나는 부분부터 이 함수를
찾아서 컴파일을 시키기 때문에, 저렇게 인지를 시켜 두는 것입니다.

저렇게 적기 싫으면, main문 위에 함수의 내용과 전부 적어 두는 것도 하나의 방법인데,
그렇게 하는 건 옛날 방식이기 때문에, 현재는 저런식으로 사용을 하고 있습니다.

그럼 오늘은 여기 까지 하도록 하겠습니다.