함수 개념
수학에서 배운 개념과 유사합니다. 특정한 입력을 받아서 작업을 수행하면 결과를 반환하는 상자입니다. 동일한 코드를 여러 번 쓸 때 주로 함수를 사용합니다.
C언어에는 사용자 정의 함수와 라이브러리 함수가 있습니다. 라이브러리 함수는 printf()
, scanf()
등 C언어에서 제공하는 기본 함수이며, <stdio.h>
헤더 파일 안에 포함되어 있습니다. 사용자 정의 함수는 사용자가 직접 제작한 함수입니다.
int main(void)
에서 main()
은 C언어 기본 함수 이름입니다. int
는 함수가 정수 값을 반환한다는 것을 의미하고, void
는 함수가 값을 반환하지 않음을 의미합니다. double
, float
등 다른 자료형을 사용하여 함수를 정의할 수도 있습니다.
int main(void)
에서 void
는 생략 가능합니다. void
는 반환형이 없다는 뜻입니다. int
, double
등으로 함수를 정의할 때는 return
값을 반드시 작성해야 합니다.
함수 생성
다음은 별을 90번 찍는 코드입니다. 함수를 사용하지 않아 비효율적입니다.
#include <stdio.h>
int main() {
int i = 0;
for (int i = 0; i < 30; i++) {
printf("*");
printf("\n");
}
for (i = 0; i < 30; i++) {
printf("*");
printf("\n");
}
for (i = 0; i < 30; i++) {
printf("*");
printf("\n");
}
return 0;
}
이 코드를 함수를 사용하여 효율적으로 바꿔보겠습니다.
#include <stdio.h>
void print_star() {
int i = 0;
for (int i = 0; i < 30; i++) {
printf("*");
printf("\n");
}
}
int main() {
print_star();
print_star();
print_star();
return 0;
}
30번까지 별을 찍는 코드를 함수로 만들어서 3번 호출했습니다. 반복문을 이용해서 함수를 3번 호출하는 코드도 가능합니다.
결과는 다음과 같습니다.

함수의 3단 구조
#include <stdio.h>
void print_star(); // 함수의 원형
int main() {
print_star(); // 함수 호출
print_star();
print_star();
return 0;
}
void print_star() { // 함수 정의
int i = 0;
for (int i = 0; i < 30; i++) {
printf("*");
printf("\n");
}
}
일반적으로 협업을 할 때 많이 쓰는 3단 구조입니다. 프로그램이 복잡해질수록 3단 구조가 가독성을 높여줍니다.
인수와 매개변수
인수는 전달하려는 값이고 매개변수는 외부에서 함수 호출 시 받아오는 값입니다. int main(void)
와 int main()
은 매개변수가 없다는 점에서 동일합니다.
아래 예제 코드를 통해 설명해보겠습니다.
#include <stdio.h>
// 두 정수 중 더 큰 값을 반환하는 함수 정의
int max(int x, int y) {
if (x > y) {
return x;
} else {
return y;
}
}
int main() {
int x, y;
printf("정수를 입력하시오: ");
scanf("%d", &x);
printf("정수를 입력하시오: ");
scanf("%d", &y);
int larger;
larger = max(x, y); // 함수 호출
printf("더 큰 값은 %d입니다. \n", larger);
return 0;
}
매개변수: 함수 정의에서 사용되는 변수로, 함수가 호출될 때 전달된 인자의 값을 받습니다. 예제 코드에서 max
함수의 int x
와 int y
가 매개변수입니다.
인자: 함수가 호출될 때 함수로 전달되는 실제 값입니다. 예제 코드에서 max(x, y)
호출 시, x
와 y
가 인자입니다.
결과는 다음과 같습니다.

조금 더 응용해 보겠습니다.
#include <stdio.h>
int max(int x, int y) {
if (x > y) {
return x;
} else {
return y;
}
}
int get_integer() {
int x;
printf("정수를 입력하시오: ");
scanf("%d", &x);
return x;
}
int main() {
int x, y;
int larger;
// 정수 한 개를 입력하는 함수 get_integer()로 변환
x = get_integer();
y = get_integer();
larger = max(x, y);
printf("더 큰 값은 %d입니다. \n", larger);
return 0;
}
이전 코드와 다른 점은 정수를 입력받는 함수 get_integer()
가 추가된 것뿐입니다.