함수 - 1

이건민·2022년 4월 13일
0

powerC++

목록 보기
4/12
post-thumbnail

함수(function)

특정 작업을 수행하여 그 결과를 반환하는 문장들의 집합.
하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합



함수가 프로그래머가 직접만든 함수라면 -사용자 정의 함수(user-defined function)

컴파일러 차원에서 지원되는, 미리 만들어진 함수라면 - 라이브러리 함수(library function)





📒 C++에서 함수 정의 형식

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개)

여러개를 사용하고 싶으면 포인터, 레퍼런스 사용






📒 함수 원형(function prototype)

함수를 사용할 때는 미리 컴파일러에게 함수에 대한 정보를 알려야 한다

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){}
불가능




📒 중복 함수(oveloading function)

같은 이름의 함수가 여러 개 존재할 수 있다.
다른 종류의 데이터에 같은 처리를 수행하는 경우에 사용
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을 적어주기만 하면 끝
다만, 함수 호출이 여러 번 이루어지면 코드가 반복 복사되어 전체코드의 크기가 늘어나게된다.

profile
모든 게시글에 대한 수정 요구 및 지적 환영합니다

0개의 댓글

관련 채용 정보