함수는 C언어에서 많은 작업들을 세분하거나 반복적인 코드들를 묶어서 공통의 흐름으로 묶어 처리하는 단위입니다. C언어에서 함수의 사용은 함수가 다른 함수를 호출하는 방식으로 동작을하고 여러개의 함수들의 묶음으로 큰 프로그램을 만들게 됩니다. C언어에서 함수를 작성하고 사용하는 능력을 키워 초급개발자에서 중급, 고급 개발자로 한걸음 나아가도록 합시다. 이번 파트에서는 표준입출력함수와 같이 시스템에서 이미 만들어져 제공되는 함수에 관한 내용이 아니라 사용자가 필요에 따라 함수를 정의하고 사용하는 내용을 다룹니다. 전자를 시스템 라이브러리 함수라고 하고 후자를 사용자 정의 함수라고 하겠고, 별도의 언급이 없는 한 함수를 작성한다고 하면 사용자 정의 함수에 관한 내용으로 이해하시길 바랍니다.
함수의 기초
함수를 정의 한다는 말은 함수를 작성한다는 말과 동일한 의미입니다. 함수의 정의는 다음과 같은 형식을 갖추어야 합니다.
return_type function_name (parameters...)
{
statements;
}
return_type은 함수가 종료할 때 반환하는 값의 종류를 의미합니다. 예를 들어 return_type이 int이라고 하면 부호있는 정수형을 반환합니다. function_name은 함수의 이름인데 영숫자(alphanumeric)을 사용하여 적당한 함수이름을 만들면 됩니다. 단, 함수이름을 시스템에서 정의된 함수이름과 동일하거나 int, char와 같은 시스템에서 사용하는 이름만 사용하면 안됩니다. parameters는 함수에 넘겨주거나 넘겨받을 매개변수 값을 의미합니다. statements는 변수선언, 제어문, 순환문등 개발자가 필요한 프로그램의 흐름을 문법에 맞게 작성을 해 주면 됩니다.
예를 들어 정수형 매개변수 2개를 입력받아 두 값의 합을 반환하는 함수를 만들어 보겠습니다.
먼저 함수의 반환값은 정수형인 int로 합니다.
함수의 이름은 add_int라는 이름으로 정합니다.
매개변수 두개는 각각 int num1, int num2라고 정하겠습니다.
함수에서의 역할은 두개의 변수를 더해서 반환하는 문장을 작성합니다.
함수를 정의하면 다음과 같이 되겠군요.
int add_int (int num1, int num2)
{
return (num1 + num2);
}
함수 내부에 int sum이라는 변수를 하나 더 정의하여 다음과 같이 작성해도 됩니다.
int add_int (int num1, int num2)
{
int sum = 0;
sum = num1 + num2;
return (num1 + num2);
}
그러면 우리가 정의한 함수를 사용하는 쪽(호출하는 쪽)에서는 어떻게 할까요?
다음과 같이 함수를 호출하면 됩니다.
void main ()
{
int ret = 0;
ret = add_int (10, 2);
printf ("10 + 2 = %d\n", ret);
}
앞서 언급했다시피 void main() {...} 도 함수입니다. C언어에서 반드시 한번만 존재해야 하고 C언어 프로그램은 반드시 이 main함수에서 부터 시작됩니다. 여기서 앞서 정의한 add_int함수를 호출하는데 매개변수 자리에 10과 2를 입력했습니다. 함수는 정수형 매개변수 두개를 더해 반환한 값을 ret라는 변수에 저장합니다.
전체 프로그램 소스를 아래와 같이 작성을 하고 컴파일을 해보겠습니다.
#include <stdio.h>
void main ()
{
int ret = 0;
ret = add_int (10, 2);
printf ("10 + 2 = %d\n", ret);
}
int add_int (int num1, int num2)
{
return (num1 + num2);
}
Executing task: gcc c:\CS\add_int.c -g -o c:\CS/add_int <
c:\CS\add_int.c: In function 'main':
c:\CS\add_int.c:7:11: warning: implicit declaration of function 'add_int' [-Wimplicit-function-declaration]
ret = add_int (10, 2);
컴파일은 되었지만, warning: implicit declaration of function 'add_int' 이란 경고 메시지가 뜹니다. 함수를 명시적으로 선언을 하지 않았기 때문에 발생하는 경고 메시지인데, 실행하는 데는 문제가 없지만 뭔가 찝찝하죠.
C컴파일러가 코드 맨 위에서부터 차례대로 컴파일을 위해 문장검사를 하다가 add_int라는 함수를 만났는데 얘는 처음 만나는 함수라서 그렇습니다. 이런 경우 add_int함수를 main함수 앞에서 정의 해 주거나, main함수 전에
int add_int(int, int);
이렇게 명시적으로 선언을 해주면 컴파일러가 이 함수를 어디선가 정의했다고 생각하고 경고없이 컴파일이 진행됩니다.
'프로그래밍 > C언어' 카테고리의 다른 글
C언어 공부하기 - 스토리지클래스와 프로그램구조 (3) | 2020.08.19 |
---|---|
C언어 공부하기 - 함수(2) (0) | 2020.08.10 |
C언어 공부하기 - 순환문(2) do~while, break, continue, goto (0) | 2020.07.25 |
C언어 공부하기 - 순환문(1) while, for (0) | 2020.07.23 |
C언어 공부하기 - 제어문 (1) | 2020.07.21 |
댓글