Chapter. 4

김동현·2022년 10월 11일
0
post-thumbnail

함수의 작성과 사용

  

표준 라이브러리 함수

printf나 scanf함수처럼 특정 기능을 미리 약속하고 프로그램에서 바로 사용할 수 있게 구현되어 있는 함수
 

함수정의

함수를 만드는 것을 함수 정의라고 한다.
 

함수호출

함수를 사용하기 위해서는 함수를 호출해야 한다.

함수를 만드는 것은 얼마든지 가능하지만, 실행하려면 반드시 함수를 호출해야 한다.

result = sum (a, b);

위의 식의 경우 함수는 sum함수이다.

sum 함수가 실행되면 main함수의 실행은 잠시 멈추고 sum함수의 정의 부분에 있는 코드가 실행된다.
 

함수반환

호출된 함수가 실행을 끝내고 값을 반환할 때 return문을 사용한다.

이때 sum함수가 실행되었다고 가정하면, sum함수의 실행 이후 호출한 곳으로 돌아가야 하기에 호출한 곳으로

반환하는 것이다.

  • 컴파일러는 함수를 호출할 때 반환값을 저장할 공간을 미리 준비해둔다. 그 공간의 경우, 컴파일러가 별도로 확보하는 공간이며 식별할 수 있는 이름이 없으므로 계속 사용할 수 없다.

  

함수선언

함수 선언의 경우 컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 한다.
 

키워드로 끝내는 핵심 포인트

함수 선언을 하면 함수를 만들지 않고도 함수의 형태를 미리 알릴 수 있다.

함수 정의는 원하는 기능의 함수를 직접 만드는 것이다.

함수 호출은 만든 함수를 사용할 때 사용한다.

return은 함수를 실행한 다음 값을 반환할 때 사용하는 제어문이다.


  

매개변수가 없는 함수

get_num 함수는 매개변수가 필요없다.

괄호만 사용하는 것도 좋지만, void를 넣어 매개변수가 없음을 명시적으로 표현하는 것이 좋다.

#include <stdio.h>

int get_num(void);                      // 함수 선언

int main(void)
{
    int result;

    result = get_num();                 // 함수 호출, 반환 값은 result에 저장 
    printf("반환값 : %d\n", result);      // 반환값 출력
    return 0;
}

int get_num(void)                       // 매개변수가 없고 반환형만 있다.
{
    int num;                            // 키보드 입력값을 저장할 변수

    printf("양수 입력 : ");               // 입력 안내 메시지
    scanf("%d", &num);                  // 키보드 입력

    return num;                         // 입력한 값 반환
}

int get_num(void) → 이런식으로!!

  • get_num 함수는 매개변수를 필요로 하지 않는데,,, “get_num” 이렇게 적어? 아니면 get_num(void)? 둘다 아니다. get_num() 이렇게 적어야 한다. 괄호조차 없다면 함수를 호출하는 문장이 아닌 그냥 함수의 이름으로 인식하기 때문이다.

  

반환값이 없는 함수

회면에 출력할 내용이 함수가 수행한 결과인 경우 특별히 값을 반환할 필요가 없다.

매개변수의 빈자리에 void를 사용했던 것처럼 반환형의 자리에 void를 사용하면 된다.

#include <stdio.h>

void print_char(char ch, int count);     // 함수 선언

int main(void)
{
    print_char('@',5);                   // 문자와 숫자를 주고 함수 호출

    return 0;
}

void print_char(char ch, int count)      // 매개변수는 있으나 변환형은 없다
{
    int i;

    for (i = 0; i < count; i++)          // i는 0부터 count-1까지 증가, count번 반복
    {
        printf("%c", ch);                // 매개변수 ch에 받은 문자 출력
    } 
    
    return;
}
  • 출력값 @는 결국, 함수가 수행한 결과이므로 반환형의 자리에 void를 입력하면 된다.

  

재귀 호출 함수

# include <stdio.h>

void fruit(void);          // 함수 선언

int main(void)
{
    fruit();               // 함수 호출

    return 0;
}

void fruit(void)           // 재귀 호출 함수 정의
{
    printf("apple\n");
    fruit();               // 자신을 다시 호출
}

void fruit(void) // 재귀 호출 함수 정의
{
printf("apple\n");
fruit(); // 자신을 다시 호출
}

이 부분이 바로 재귀 호출 함수 부분이다.

printf("apple\n");  을 수행한 이후, 

fruit();    다시 호출하기에 무한 반복된다. 
profile
디자인과 개발을 모두 할줄 아는 능력있는 개발자가 되고싶습니다.

0개의 댓글