[C언어] 함수 : 여러 가지 함수 유형

조아리 ㅣ 2024. 8. 19. 11:11

반응형

함수가 꼭 반환형과 매개변수가 있는 것은 아닙니다. 이번 시간엔 반환형과 매개변수가 없는 함수들에 대해서 알아보겠습니다.

반응형

매개변수가 없는 함수

매개변수가 없는 함수가 있습니다. 예를 들어 키보드로 수를 입력하는 함수가 그렇습니다. 다음 예제를 보고 설명하겠습니다.

 

#include <stdio.h>

int get_num(void);

int main(void){
    int result;

    result = get_num();
    printf("반환값 : %d\n", result);
}

int get_num(void){
    int num;

    printf("숫자 입력 : ");
    scanf("%d", &num);

    return num;
}

위 코드를 보면 매개변수가 들어갈 자리에 매개변수 대신 void를 작성하고, 호출할 때는 빈 괄호로 작성한 모습을 볼 수 있습니다. 함수 내에서 반환할 값을 scanf 함수를 이용해 변수에 저장하므로 매개변수가 필요 없게 됩니다.

 

 

 

 

반환값이 없는 함수

이번에는 반환값이 없는 함수에 대해 알아보겠습니다. 다음 예제를 보고 설명하겠습니다.

 

#include <stdio.h>

void print_char(char ch, int count);

int main(void){
    printf_char('@', 5);

    return 0;
}

void pinrt_char(char ch, int count){
    int i;

    for(i = 0; i < count; i++){
    	printf("%c", ch);
    }

    pirntf("\n");

    return 0;
}

 

위 함수는 반환형이 void인 함수입니다. 즉, 반환값이 없다는 의미입니다. 매개변수로 받은 문자 '@'을 5번 출력하기만 하면 되니 반환값이 필요 없습니다.

 

 

 

재귀호출 함수

다른 함수를 호출하는 일반 함수들과는 달리 자기 자신을 호출하는 함수를 재귀 호출 함수라고 합니다. 다음 코드를 보고 설명하겠습니다.

 

#include <stdio.h>

void car(int count);

int main(void){
    car(1);

    return 0;
}

void car(int count){
    printf("COPEN\n");
    if(count == 3) return;
    car(count + 1);
    printf("DAIHATSU\n");
}

 

실행 결과

COPEN
COPEN
COPEN
DAIHATSU
DAIHATSU

 

위 코드를 살펴보겠습니다. car 함수의 내부를 자세히 보면 car(count + 1);이 보일 것입니다. 이는 자기 자신을 호출하는 코드입니다. count가 1씩 증가하며 다시 호출되고, if 문과 비교하게 됩니다. 결국 count가 1일 때부터 3일 때까지 COPEN이 출력됩니다.

그런데 이상한 부분이 있습니다. if(count == 3)을 만족하여 return;을 했는데도 DAIHATSU가 두 번 출력됩니다. 이것이 재귀 호출 함수와 반복문의 차이점입니다. 자기 자신을 호출하는 것이지만, 기존에 호출된 함수와는 다른 함수로 취급됩니다. car 폴더 안에 있는 또 다른 car 폴더를 여는 것처럼 return; (뒤로가기)을 하면 본인이 호출되었던 곳으로 되돌아갑니다. 그래서 DAIHATSU를 두 번 출력하고 프로그램이 종료되는 것입니다.

다음은 위 코드를 그림으로 표현한 것입니다.

 

 

번호 순서대로 진행됩니다. 그림을 보면 알 수 있듯이, 같은 car 함수지만 각각의 호출은 서로 다른 함수 호출처럼 동작합니다.

반응형