함수란?
기능을 수행하는 코드 단위
ex) main(), printf(), scanf() ...
표준 라이브러리 함수 : 특정 기능을 미리 약속하고 프로그램에서 바로 사용할 수 있게 구현되어 있는 함수
stdio.h 와 같은 헤더 파일에 포함되어 있다.
함수 정의란 함수를 만드는 것을 말한다.
main 함수와 또 다른 함수가 기능을 나누어 수행하도록 만들어 보도록 하겠다.
함수 원형
1. 함수의 기능에 맞는 이름은?
2. 함수가 기능을 수행하는 데 필요한 데이터는?
3. 함수가 수행된 후의 결과는?
반환형 함수명 (매개변수1, 매개변수2)
{
// 함수가 수행하는 명령; 결과값을 돌려보냄
}
두 정수를 더하는 함수 예제
int sum(int x, int y){ // 함수 정의 시작 (함수 이름: sum)
int temp; // 두 정수의 합을 잠시 저장할 변수
temp = x + y; // x와 y의 합을 temp에 저장
return temp; // temp의 값을 반환
} // sum 함수의 끝
temp와 같이 함수 내에서 필요한 변수가 있으면 별도로 선언한다.
여기서 temp는 꼭 필요한 변수가 아니므로 return (x+y);로 바로 반환하는 것도 가능하다.
int sum(int x, int y)
{ return (x + y); }
함수는 다른 함수와 분리되어 독립적으로 정의해야 하기 때문에 sum 함수는 main 함수와 별도의 구역에 작성한다.
#include <stdio.h>
int sum(int x, int y){ // 함수 정의
int temp;
temp = x + y;
return temp;
}
int main(){ // main문
int a = 10, b = 20;
int result;
result = sum(a, b); // 함수 호출
printf("result : %d\n", result);
}
#include <stdio.h>
int sum(int x, int y); // 함수 선언
int main(){ // main문
int a = 10, b = 20;
int result;
result = sum(a, b); // 함수 호출
printf("result : %d\n", result);
}
int sum(int x, int y){ // 함수 정의
int temp;
temp = x + y;
return temp;
}
새로 정의한 함수 안에서 사용되는 변수명은 다른 함수의 변수명과 같을 수 있다.
int sum(int a, int b){ // 매개변수 a, b는 main 함수의 변수와 이름이 같음
int temp;
temp = a + b;
return temp;
}
함수는 호출을 통해 실행된다.
위의 예제에서의 main문에서 호출부분을 보면
result = sum(a, b); // 함수 호출
함수 이름을 사용하며 함수에 필요한 데이터를 괄호 안에 넣어준다. 이 데이터(a, b)를 인수라고 한다.
인수는 상수나 변수를 쓸 수 있고 수식을 사용하면 수식의 결과값이 인수로 쓰이게 된다.
sum(30, 40) // 상수 인수
sum(a*2, b/3) // 수식 인수
인수의 값은 호출된 함수의 매개변수에 복사되어 사용된다.
호출된 함수가 실행을 끝내고 값을 반환할 때 return문을 사용한다.
return문이 실행되면 함수가 끝나고 호출되었던 부분으로 돌아간다.
실행 과정
컴파일러는 함수를 호출할 때 반환값을 저장할 공간을 미리 준비해둔다. 이 공간은 식별할 수 있는 이름이 없어서 계속 사용할 수는 없다.
반환값을 대입 연산으로 다른 변수에 복사하거나 수식에 바로 사용하는 것은 가능하다.
result = sum(a,b) * 2; // 반환값 -> 곱셈 -> 대입
함수 선언은 컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 한다.
함수 원형 뒤에 세미콜론을 붙인다.
int sum(int x, int y);
매개변수 이름은 생략할 수 있다.
int sum(int, int); // 매개변수 이름을 생략한 형태
함수를 미리 선언하지 않으려면 호출하는 곳 이전에 정의해야한다. 이때 여러 함수 간에 호출 관계가 엉켜 있으면 (함수 안에서 다른 함수를 호출하는 경우) 순서에 맞게 정의하기 어려워진다.
따라서 필요한 함수를 main문 밑에 차례로 만들고 main문 앞에는 모든 함수를 선언하여 한눈에 파악하기 쉽게 작성하는 것이 좋다.