60 함수 사용하기

C 언어로 프로그래밍을 하다 보면 들어가는 값만 바뀔 뿐 같은 코드가 계속 반복되는 경우가 많습니다. 특히 같은 코드를 반복해서 작성하면 코드도 길어지고 중간에 실수할 가능성이 높아집니다.

C 언어에서는 함수(function)라는 기능을 제공하는데 특정 용도의 코드들을 한 곳에 모아놓은 것을 뜻합니다. 그래서 처음 한 번만 작성해놓으면 나중에 필요할 때 계속 불러 쓸 수 있습니다. 예를 들어 지금까지 사용했던 printf, scanf 등도 모두 C 언어에서 미리 만들어둔 함수입니다.

함수는 다양한 사용 방법이 있으므로 이제부터 각 유닛에서 함수의 사용법을 자세히 알아보겠습니다.

60.1 Hello, world! 출력 함수 만들기

함수를 정의하는 방법은 다음과 같이 반환값 자료형, 함수 이름, ( ) (괄호)순으로 적어준 뒤 { } (중괄호) 안에 원하는 코드를 작성하면 됩니다(함수 이름을 짓는 방법은 변수 이름을 짓는 방법과 같습니다).

반환값자료형 함수이름()
{
    코드;
}

다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

function.c

#include <stdio.h>

void hello()    // 반환값이 없는 hello 함수 정의
{
    printf("Hello, world!\n");    // Hello, world! 출력
}

int main()
{
    hello();    // hello 함수 호출

    return 0;
}

실행 결과

Hello, world!

이제 함수를 만들려면 main 함수 바깥에서 작성해야 합니다. 다음과 같이 main 함수 위에서 반환값의 자료형은 void, 이름은 hello인 함수를 정의했습니다. 그리고 중괄호 안에서 printf"Hello, world!" 문자열을 출력했습니다.

void hello()    // 반환값이 없는 hello 함수 정의
{
    printf("Hello, world!\n");    // Hello, world! 출력
}

여기서 함수의 반환값 부분에 void를 적어주면 함수의 반환값이 없다는 뜻이 됩니다. 즉, void는 함수의 반환값이 없음을 나타낼 때와 포인터로 사용할 때의 의미가 다릅니다. 이 부분을 잘 기억해두세요.

함수를 만들었으니 사용을 해봐야겠죠? main 함수 안에서 hello();와 같이 함수 이름과 ()를 적어준 뒤 ; (세미콜론)을 붙이면 함수를 사용할 수 있습니다.

int main()
{
    hello();    // hello 함수 호출

    return 0;
}

이렇게 함수를 사용하는 방법을 "함수를 호출(call)한다"라고 부르기도 합니다.

다음은 main 함수와 hello 함수의 실행 순서입니다.

  1. main 함수 실행
  2. hello 함수 호출
  3. hello 함수 실행
  4. printf 함수 실행 및 "Hello world!" 출력
  5. hello 함수 종료
  6. 0 반환 및 main 함수 종료
그림 60‑1 main 함수와 hello 함수의 실행 순서
참고 | 지역 변수

함수 안에 선언된 변수를 지역 변수라고 부르는데 이 지역 변수의 특징은 함수가 끝나면 사라진다는 점입니다.

void hello()
{
    int num1 = 10;    // 지역 변수. hello 함수가 끝나면 사라짐

    printf("Hello, %d", num1);
}

int main()
{
    hello();
    printf("%d", num1);    // 컴파일 에러: hello 함수의 지역 변수 num1은
                           // 함수 hello 안에서만 사용할 수 있음

    return 0;
}

hello 함수 안에 선언된 지역 변수 num1hello 함수 안에서만 사용할 수 있고, 함수 바깥에서는 사용할 수 없습니다. 자세한 내용은 '78.1 변수의 범위 알아보기'를 참조하세요.