함수(Function)는 하나의 작업을 수행하기 위해 함께 묶인 문장들의 집합입니다. 모든 C 프로그램에는 최소한 하나의 함수가 존재하며, 그것이 바로 main() 함수입니다. 가장 간단한 프로그램이라도 필요에 따라 추가적인 함수를 정의할 수 있습니다.
코드를 여러 개의 개별 함수로 나누어 작성할 수 있습니다. 코드를 어떻게 나눌지는 프로그래머의 몫이지만, 일반적으로 논리적으로 구분하여 각 함수가 특정 작업 하나를 담당하도록 설계하는 것이 좋습니다.
함수 선언(declaration)은 컴파일러에게 함수의 이름, 반환 타입, 매개변수에 대한 정보를 알려주는 역할을 합니다. 반면 함수 정의(definition)는 함수의 실제 본문(body)을 제공합니다.
C 표준 라이브러리는 프로그램에서 호출할 수 있는 다양한 내장 함수들을 제공합니다. 예를 들어 두 문자열을 연결하는 strcat(), 한 메모리 위치에서 다른 위치로 데이터를 복사하는 memcpy() 등이 있습니다.
참고로 함수는 메서드(method), 서브루틴(sub-routine), 프로시저(procedure) 등으로도 불립니다.
함수 정의하기
C 언어에서 함수 정의의 일반적인 형식은 다음과 같습니다.
return_type function_name( parameter list ) {
body of the function
}C 언어의 함수 정의는 함수 헤더(header)와 함수 본문(body)으로 구성됩니다. 함수를 이루는 각 요소는 아래와 같습니다.
반환 타입(Return Type) − 함수는 값을 반환할 수 있습니다. 반환 타입은 함수가 반환하는 값의 데이터 타입을 의미합니다. 일부 함수는 값을 반환하지 않고 원하는 작업만 수행하는데, 이 경우 반환 타입은 void 키워드를 사용합니다.
함수 이름(Function Name) − 함수의 실제 이름입니다. 함수 이름과 매개변수 목록을 합쳐서 함수 시그니처(signature)라고 부릅니다.
매개변수(Parameters) − 매개변수는 일종의 자리표(placeholder)와 같습니다. 함수가 호출될 때 매개변수에 값을 전달하며, 이때 전달되는 값을 실제 매개변수(actual parameter) 또는 인자(argument)라고 합니다. 매개변수 목록은 매개변수의 타입, 순서, 개수를 의미합니다. 매개변수는 선택 사항이므로 매개변수가 없는 함수도 존재할 수 있습니다.
함수 본문(Function Body) − 함수가 수행할 작업을 정의하는 문장들의 모음입니다.
예제 코드
/* 두 숫자 중 큰 값을 반환하는 함수 */
int max(int num1, int num2) {
/* 지역 변수 선언 */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}함수 선언
함수 선언은 컴파일러에게 함수의 이름과 호출 방법을 알려줍니다. 함수의 실제 본문은 별도로 정의할 수 있습니다.
함수 선언은 다음과 같은 형식을 가집니다.
return_type function_name( parameter list );
앞서 정의한 max() 함수의 선언은 다음과 같습니다.
int max(int num1, int num2);
함수 선언에서는 매개변수의 이름이 중요하지 않으며 타입만 있으면 되기 때문에, 아래와 같은 선언도 유효합니다.
int max(int, int);
함수 호출
C 함수를 만들 때는 함수가 수행해야 할 작업을 정의합니다. 그리고 정의된 작업을 실행하려면 해당 함수를 호출(call)해야 합니다.
프로그램이 함수를 호출하면 프로그램의 제어권이 호출된 함수로 넘어갑니다. 호출된 함수는 정의된 작업을 수행한 뒤, return 문이 실행되거나 함수를 닫는 중괄호에 도달하면 제어권을 다시 메인 프로그램으로 돌려줍니다.
함수를 호출하려면 함수 이름과 함께 필요한 매개변수를 전달하기만 하면 됩니다. 만약 함수가 값을 반환한다면, 그 반환값을 변수에 저장할 수도 있습니다. 아래 예제를 살펴보겠습니다.
예제 코드
#include <stdio.h>
/* 함수 선언 */
int max(int num1, int num2);
int main () {
/* 지역 변수 정의 */
int a = 100;
int b = 200;
int ret;
/* 최대값을 구하기 위한 함수 호출 */
ret = max(a, b);
printf( "Max value is : %d\n", ret );
return 0;
}
/* 두 숫자 중 큰 값을 반환하는 함수 */
int max(int num1, int num2) {
/* 지역 변수 선언 */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}실행 결과
Max value is : 200