C언어에서 여러분이 사용하는 대부분의 기능은 함수입니다. printf, scanf도 사실 함수입니다. 이번엔 함수를 정의하고 호출하는 법을 배워봅시다. 함수의 기본형은 아래와 같습니다.
반환값자료형 함수이름(매개변수)
{
코드
}
함수이름(인수)
잠시 반환값, 매개변수에 대해선 나중으로 미뤄두고 기본적인 함수, 이를테면 간단한 인사를 출력하는 함수를 한번 작성해봅시다.
#include <stdio.h>
void Hello()
{
printf("Hello, ");
}
int main()
{
printf("Say ");
Hello();
printf("world!");
return 0;
}
Say Hello, world!
<aside> 💡 참고 : void는 함수의 반환값이 없을때 사용하는 키워드입니다.
</aside>
머릿속으로 코드의 흐름이 그려지나요?
C언어는 위에서 아래로 코드를 해석하지만 코드의 첫 실행은 main함수에서 시작되므로, 코드의 실행 순서는 아래 이미지과 같이 됩니다.

위 예제에서는 main함수에서 Say를 먼저 출력하고 Hello함수가 실행됩니다. Hello 함수에서 모든 코드가 실행된 이후 main함수의 다음 줄에서 world! 를 출력합니다.
함수는 반드시 main함수 위에 적어야 합니다. 왜냐하면 코드는 위에서 아래로 해석되므로 함수를 main 아래에 작성하면 main함수에서 함수를 호출할 때 함수가 정의되지 않은 상태이기 때문입니다.
#include <stdio.h>
int main()
{
printf("Say ");
Hello(); // Hello 함수를 호출하는 시점에서 함수가 선언되지 않음. 오류 발생
printf("world!");
return 0;
}
void Hello()
{
printf("Hello, ");
}
그렇다면 main 함수 아래에 함수를 작성하는 방법은 없는걸까요? 물론 있습니다. 함수의 머리부분만 따로 위에 다시 작성하여 컴퓨터에 알려주면 됩니다. 이런 방식을 함수 선언이라고 합니다.
#include <stdio.h>
void Hello() // 함수 선언
int main()
{
printf("Say ");
Hello();
printf("world!");
return 0;
}
void Hello() // 함수 정의
{
printf("Hello, ");
}
Say Hello, world!