C 프로그래밍에서 함수는 크게 두 가지 기준으로 분류할 수 있습니다. 하나는 인수(매개변수)를 전달받는지 여부이고, 다른 하나는 값을 반환하는지 여부입니다.
함수는 인수를 받을 수도 있고 아무것도 받지 않을 수도 있으며, 마찬가지로 어떤 값을 반환할 수도 있고 아무것도 반환하지 않을 수도 있습니다. 이 두 가지 기준을 조합하면 C 함수를 다음과 같은 네 가지 유형으로 나눌 수 있습니다.
- 인수가 없고 반환값도 없는 함수
- 인수는 없지만 값을 반환하는 함수
- 인수를 받지만 아무것도 반환하지 않는 함수
- 인수를 받고 값도 반환하는 함수
1. 인수 없음 · 반환값 없음
예제 코드
#include <stdio.h>
void my_function() {
printf("인수를 받지 않고, 아무것도 반환하지 않는 함수입니다.");
}
int main() {
my_function();
return 0;
}
실행 결과
인수를 받지 않고, 아무것도 반환하지 않는 함수입니다.
이 함수는 입력 인수를 전달받지 않으며, 반환형이 void로 선언되어 있으므로 호출한 곳에 아무런 값도 돌려주지 않습니다. 단순히 정해진 작업만 수행하는 형태입니다.
2. 인수 없음 · 값 반환함
예제 코드
#include <stdio.h>
int my_function() {
printf("인수는 받지 않지만, 50을 반환합니다.\n");
return 50;
}
int main() {
int x;
x = my_function();
printf("반환된 값: %d", x);
return 0;
}
실행 결과
인수는 받지 않지만, 50을 반환합니다. 반환된 값: 50
이 함수는 입력 인수를 받지 않지만, 반환형이 int이므로 호출자에게 정수 값을 돌려줍니다. return 문으로 반환된 값은 변수 x에 저장되어 이후에 활용할 수 있습니다.
3. 인수 있음 · 반환값 없음
예제 코드
#include <stdio.h>
void my_function(int x) {
printf("%d를 인수로 받았지만, 아무것도 반환하지 않습니다.", x);
}
int main() {
int x = 10;
my_function(x);
return 0;
}
실행 결과
10을 인수로 받았지만, 아무것도 반환하지 않습니다.
이 함수는 정수 인수를 하나 전달받아 그 값을 활용하지만, 반환형이 void이므로 값을 돌려주지 않습니다. 참고로 void 함수에서 return 50;처럼 값을 반환하면 컴파일 오류가 발생하므로 주의해야 합니다.
4. 인수 있음 · 값 반환함
예제 코드
#include <stdio.h>
int my_function(int x) {
printf("인수를 받아 그 제곱 값을 반환합니다.\n");
return x * x;
}
int main() {
int res;
res = my_function(12);
printf("반환된 값: %d", res);
return 0;
}
실행 결과
인수를 받아 그 제곱 값을 반환합니다. 반환된 값: 144
이 함수는 인수를 전달받고, 그 인수의 제곱을 계산하여 호출자에게 반환합니다. 입력을 처리하고 결과를 돌려주는 구조로, 실무에서 가장 널리 사용되는 함수 형태입니다.
마무리 정리
| 유형 | 인수 | 반환값 | 대표적인 활용 예 |
|---|---|---|---|
| 1번 유형 | 없음 | 없음 | 고정된 메시지 출력 등 단순 작업 |
| 2번 유형 | 없음 | 있음 | 상수 반환, 내부 상태 조회 |
| 3번 유형 | 있음 | 없음 | 화면 출력, 파일 쓰기 등 부수 효과 중심 작업 |
| 4번 유형 | 있음 | 있음 | 계산 후 결과 반환 (가장 일반적) |
함수 설계 시 어떤 유형이 적합한지 판단하려면, 먼저 "이 함수가 외부로부터 데이터를 받아야 하는가"와 "처리 결과를 호출자에게 알려야 하는가"를 생각해 보면 됩니다. 이 두 질문에 답하면 자연스럽게 적절한 함수 형태를 선택할 수 있습니다.