본문 바로가기

Programming/C Language

함수 정리

절차지향적 성격을 띄는 C언어에서 함수는 전부라고 말해도 과언이 아닌것 같다.
모든 C에는 함수가 없는 코드가 없다.
함수로 시작해서 함수로 끝나는 언어인 C언어의 함수를 정리해보자.

초반부에서 함수에 대해 언급한 적이 있는데 그 당시 그림을 다시 살펴보자


반환형태             함수 이름        입력형태

int                        main              (void)
{


함수 몸체

}                이러한 구조의 그림을 기억하자!

이것 또한 정말 중요한 내용이다!
입력(전달인자)와 그에 따른 적절한 반환값이 존재하는것이 함수라고 앞서 얘기했다.
그러나 c언어에는 전달인자가 없거나 반환값이 없는 경우의 함수들도 존재한다.

C언어에는 총 4가지 종류로 함수를 나눌수있다.

1) 전달인자가 있고 반환값이 있는 경우
2) 전달인자가 있고 반환값이 없는 경우
3) 전달인자가 없고 반환값이 있는 경우
4) 전달인자가 없고 반환값이 없는 경우

전달인자의 유무 그리고 반환값의 유무에 따라 함수를 나눈다.


1번의 경우의 예시를 보자

int Add(int num1, int num2)

{

int result = num1 + num2;
return result

}

반환형이 int이고 전달인자(매개변수)로 int형 변수 num1과num2를 전달하는 함수 Add를 선언 및 정의하였다.
함수 몸체부를 살펴보면 result값을 반환하도록 되어있다.
반환값이 result , result는 num1 + num2 , num1과 num2는 int형 , 그래서 반환값의 type또한 int가 되는것이다.
참고로 , 함수호출시 전달하는 매개변수의 갯수는 여러개가 될수 있지만 반환값은 하나다.
예시의 함수를 직접 코드에 응용해보자



3행~8행        Add함수를 선언하고 정의해줬다.

10행        main함수를 열었다

13행    앞서 정의한 Add함수를 실행시켜 result값에 저장시킨 후 출력

16행     똑같이 실행

결과값을 예상해보자

우리가 정의한 Add함수는 int형 매개변수 2개를 인자로 받고 그 2개의 인자를 더하여 result에 저장시키고 그값을 반환하도록 설계하였다.
그러면 6과 15가 출력이 되어야한다.    다들 직접 실행해보도록 하자.


다음 2번의 경우 , 전달인자가 있고 반환값이 없는경우의 함수
반환이 필요없는 경우가 무엇이 있을지 생각해보자 ,            앞서 언급한 printf함수! 모니터에 값을 출력해줄뿐 ,반환이 필요없다

예시를 들어보자


void showaddresult(int num)

{

printf("덧셈결과 출력: %d \n",num);

}


위 함수는 전달인자로 num이라는 정수형 변수를 갖고 반환값이 없는 함수다.
몸체부에서는 num값을 출력해주도록 정의해줬다.
이러한 형태의 함수들이 몸체부 끝에 return 0; 등을 안적어주는 이유를 알겠는가?
맞다 , 반환형이 없기 때문이다 !
void는 '반환하지 않는다.' 정도로 해석하면 된다

다음 3번의 경우 , 전달인자가 없고 반환값이 있는경우다

int readnum(void)

{
    int num;
   scanf_s("%d",&num);

    return num;

}


이번엔 매개변수 선언 위치에 void가 왔다 , 즉 인자를 전달하지 않는다는 의미다.

다음 4번의 경우 , 전달인자와 반환값 둘다 없는 경우

void howtousethisprog(void)

{

printf("이 함수는 그냥 출력만 할뿐 입력 및 출력값은 없습니다.");

}
입력 및 반환값 선언 위치에 void가 왔다 , 즉 인자와 반환값 둘다 없다는 의미다.


다양한 함수를 정의해보고 실행해보면 반환값과 전달인자의 기능에 대해 확실히 이해가 갈 것이다!

'Programming > C Language' 카테고리의 다른 글

전역 변수 (Global Variable)  (0) 2017.10.31
지역 변수 (Local Variable)  (0) 2017.10.31
if 문 그리고 else  (0) 2017.10.30
For 문 ?  (0) 2017.10.30
Do ~ while 문 ?  (0) 2017.10.30