C언어 함수(function)의 기초 (함수의 구성, 정의, 호출)
함수(function)란?
- 함수란 영어 function에서 온 말인데 이 뜻은 "기능"을 뜻한다.
즉, 기능을 구현하는 부분을 따로 떼어 구현하는 것으로, 구조화 프로그램의 중요한 개념이라 하겠다.
함수의 기본 형태
함수의 형태는 우선 우리에게 친숙한 main 함수를 예로 들어보겠다.
함수는 윗 그림과 같이 반환 자료형과 함수이름, 인수목록으로 나뉜다.
반환 자료형이란 메인함수의 사용에서 return 0; 부분을 보면 0을 반환한다는 말인데
정수형을 반환하므로 여기서 int로 쓰였다.
그리고 함수 이름은 main 함수의 경우 프로그램 실행시 가장 먼저 실행되는 부분이므로
꼭 필요한 함수로 변경할 수 없지만 사용자 정의 함수의 경우에는
일반적인 명명규칙에 따라 사용자가 지정해줄 수 있다.
인수 목록은 main 함수에는 보통 아무것도 쓰지 않지만, 사실 괄호안의 void가 생략된 형태다.
.cpp파일로 저장하고 컴파일을 해보면 warning이 뜨는 것을 확인할 수 있다.
그리고 함수 몸체부분에서는 프로그래머가 구현하고 싶은 것을 구현하면 된다.
함수의 종류
함수의 종류에는 사용자 정의 함수와 라이브러리 함수가 있다.
① 사용자 정의 함수
사용자가 구현하고 싶은 기능을 구현하는 것이다.
변수의 경우처럼 명명규칙(언더바_나 알파벳으로 시작 등등..)에 따라 함수의 특성을 살린 이름을 지으면 된다.
예) add(), printScreen(), multiple()
② 라이브러리 함수
우리가 흔히 써오던 printf(), scanf() 같은 함수인데 이 두 함수는 stdio.h파일 안에 정의되어있다.
앞으로 C언어를 배우면서 더 많은 라이브러리 함수를 배울 것이다.
함수의 사용법
함수를 사용하려면 변수와 처럼 main()위에 선언을 해 주어야 한다.
선언과 동시에 구현을 해주어도 된다.
윗 그림의 두 경우 모두 가능하다는 것이다.
함수의 호출
함수를 선언하고 구현하였다면 호출을 해야하는데
호출하면 다음과 같은 과정이 이루어진다.
① 번이 함수의 호출 부분인데 라인 3에 정의 된 대로 int형 변수 둘을 받을 수 있다.
인수의 개수는 정의와 항상 같아야 하고, 인수의 자료형은 틀려도 에러는 발생하지 않지만
정확한 계산값을 원한다면 정의 부분의 자료형과 일치시켜줘야한다.
먼저 함수의 정의와 호출부의 형태가 일치하는지 확인한 후 제어권은 호출한 함수로 옮겨진다.
② 함수의 제어권이 add()함수로 옮겨가면 전달받은 인수의 대입이 이루어진다.
num1과 num2는 차례대로 3과 4의 값을 가지는데, 인수 a = 3; b = 4;가 이루어지는 것이다.
③ 인수를 받아왔으면 이제 함수의 몸체로 가서 프로그래머가 구현한 작업을 하게 되는데
이 함수의 경우 따로 구현한 부분이 없으므로 return문으로 가게 된다.
a+b의 값을 리턴하는 것이다. 즉, 3+4 = 7을 반환하는 것이다. 이 반환하는 값이 정수형이므로
int add(...) 라고 정의되어야 하는 것이다.
④ 제어권이 다시 main()함수로 돌아오면서 add(num1, num2)부분은 반환값인 7로 바뀌어져서
result = 7; 의 형태로 대입이 이루어진다.