사용자 정의 함수는 프로그래머가 직접 설계하여 특정 작업을 수행하도록 만든 함수이다. C 언어에서는 기본적인 함수나 수학 함수 외에도, 사용자가 필요에 따라 자신의 함수를 정의할 수 있다. 이렇게 정의한 함수는 프로그램의 재사용성, 가독성, 유지보수성을 높이는데 큰 역할을 한다.
반환형 함수이름(매개변수) {
// 함수의 내용 (코드)
return 반환값;
}
#include <stdio.h>
// 두 정수의 합을 반환하는 함수
int add(int a, int b) {
return a + b; // a와 b의 합을 반환
}
int main() {
int num1 = 10, num2 = 20;
int sum = add(num1, num2); // add 함수를 호출하고 결과를 sum에 저장
printf("Sum: %d\n", sum); // 합계 출력
return 0;
}
함수는 선언(declaration)과 정의(definition)로 구분된다.
int add(int a, int b); // 함수 선언
int add(int a, int b) { // 함수 정의
return a + b;
}
#include <stdio.h>
// 두 수의 최대 공약수를 구하는 함수
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int num1 = 56, num2 = 98;
int result = gcd(num1, num2); // gcd 함수를 호출하여 최대 공약수를 구함
printf("GCD of %d and %d is: %d\n", num1, num2, result);
return 0;
}
C 언어에서 사용자 정의 함수를 선언과 동시에 정의할 수 있지만, 함수 선언과 정의를 분리해서 사용하는 것을 많이 선호한다. 이 방식은 특히 규모가 큰 프로그램이나 여러 파일로 구성된 프로젝트에서 더 중요하게 사용된다.
또한 함수를 선언만 하고 다른 파일에서 정의할 수도 있다. 이 경우, 선언은 헤더 파일에 작성하고, 정의는 소스파일에 작성하는 방식으로 프로그램을 모듈화할 수 있다.
함수의 반환형은 함수가 반환하는 값의 자료형을 나타낸다. 함수는 작업을 완료한 후 하나의 값을 반환할 수 있으며, return
키워드를 사용하여 값을 반환한다.
int square(int n) {
return n * n;
}
double circle_area(double radius) {
return 3.14159 * radius * radius;
}
void
) : 반환할 값이 없는 경우 함수의 반환형은 void로 지정.void printMessage() {
printf("Hello, world!\n");
}
함수를 정의할 때, 매개변수(parameter)를 통해 외부에서 값을 전달받을 수 있다. 함수가 호출될 때 넘겨주는 실제 값은 인수(argument)라고 부르며, 매개변수와 인수는 1:1로 대응된다.
int multiply(int a, int b) {
return a * b;
}
int main() {
int result = multiply(3, 4); // 3과 4를 인수로 전달
printf("Result: %d\n", result); // 결과 출력
return 0;
}
C 언어에서 사용자 정의 함수를 선언과 동시에 정의할 수 있지만, 함수 선언과 정의를 분리해서 사용하는 것을 많이 선호한다.
.h
)에 모아두고, 정의는 소스 파일(.c
)에 두는 것이 일반적임. 이 방식은 프로그램 구조를 명확하게 만들어 유지보수와 협업을 용이하게 함.#include
로 포함하면 됨. 이처럼 헤더 파일을 통해 선언된 함수는 여러 소스 파일에서 정의를 공유할 수 있음.1. 헤더 파일(myfunc.h
) - 함수 선언
// myfunc.h
#ifndef MYFUNC_H
#define MYFUNC_H
int multiply(int a, int b); // 함수 선언
#endif
2. 소스 파일(myfunc.c
) - 함수 정의
// myfunc.c
#include "myfunc.h"
int multiply(int a, int b) {
return a * b;
}
3. 메인 프로그램(main.c
) - 함수 호출
// main.c
#include <stdio.h>
#include "myfunc.h" // 함수 선언을 포함
int main() {
int result = multiply(6, 7); // 함수 호출
printf("Result: %d\n", result);
return 0;
}
이 예제에서 함수 선언은 myfunc.h
파일에 위치하고, 함수 정의는 myfunc.c
파일에 있다. 그리고 main.c
파일에서 myfunc.h
를 #include
하여 multiply
함수를 호출할 수 있다.
물론, 작은 프로그램이나 단순한 작업을 할 때는 함수 선언과 정의를 동시에 사용할 수 있다. 예를 들어, 하나의 파일에 모든 코드를 작성할 때는 함수 선언 없이 바로 정의할 수 있다.
#include <stdio.h>
int add(int a, int b) { // 선언과 정의를 동시에
return a + b;
}
int main() {
int result = add(3, 4);
printf("Sum: %d\n", result);
return 0;
}
이 경우, 코드가 단일 파일로 작성되기 때문에 선언 없이 바로 정의만 해도 충분히 동작한다. 그러나 프로그램 규모가 커지고 여러 파일로 나뉘면, 선언과 정의를 분리하는 것이 더 효율적이다.