함수(function)
특정 작업을 수행하여 그 결과를 반환하는 문장들의 집합.
하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합
함수가 프로그래머가 직접만든 함수라면 -사용자 정의 함수(user-defined function)
컴파일러 차원에서 지원되는, 미리 만들어진 함수라면 - 라이브러리 함수(library function)
ex)
int add(int x, int y)
{
int result;
result = x + y;
return result;
}
int -> 반환형 (함수가 return하는 데이터의 유형, result는 int타입이다)
add -> 함수 이름
int x -> 매개변수 1(외부에서 함수 호출시 함수 작업에 필요한 데이터)
int y -> 매개변수 2
매개변수는 여러 개일 수 있지만, return값은 반드시 한 개이다(void의 경우 0개)
여러개를 사용하고 싶으면 포인터, 레퍼런스 사용
함수를 사용할 때는 미리 컴파일러에게 함수에 대한 정보를 알려야 한다
int sqrt(int , int);
int main(){
a = sqrt(2,4);
}
int sqrt(int a, int b){}
위와 같이, 함수의 이름, 매개 변수 타입, 반환형만 우선적으로 작성하고 ;를 붙인다.
쓰는 이유 : 컴파일러에게 미리 함수에 대한 정보를 주어 함수의 매개 변수, 반환형 검사 등을 하게 하기 위함.
int sqrt(int , int);
int main(){
m = sqrt(2,4);
n = sqrt(); //n은 a = 1, b = 2의 값을 가진다.
}
int sqrt(int a = 1, int b = 2){}
# 디폴트 매개변수는 뒤에서부터 앞쪽으로만 정의할수 있다.
int sqrt(int a, int b = 2){}
가능
int sqrt(int a = 1, int b){}
불가능
int multiplication(int m, int n){return m*n;}
double multiplication(double m, double n){return m*n;}
하지만, 반환형을 사용해서 구별하지는 않는다. 즉,
int multiplication(int m, int n){return m*n;}
double multiplication(int m, int n){return m*n;}
이건 안된다는 소리
일반적으로 함수를 호출하면 컴퓨터 시스템은 함수가 정의된 곳으로 점프하여 함수 안의 문장들을 차례대로 실행하고 다시 호출한 곳으로 되돌아오게 된다.
즉, 함수를 호출할 때는 돌아올 곳의 주소를 스택에 저장하고 전달되는 인자들을 스택에 저장해야한다. 함수 구성이 간단하다면 인라인 함수를 사용하는 것이 효과적이다.
함수 호출을 하지 않고 코드를 복사하여 넣어 준다.
함수 호출 오버헤드가 사라져 프로그램이 더 빠르게 실행될 수 있다.
int main(){
int result = multiply(10,5);
return 0;
}
inline int multiply(int a, int b){
return a*b;
}
함수 헤드부분에 inline을 적어주기만 하면 끝
다만, 함수 호출이 여러 번 이루어지면 코드가 반복 복사되어 전체코드의 크기가 늘어나게된다.