728x90
C++에서는 가변함수라는 강력한 임의 매개변수를 받을 수 있는 방법을 제공한다.
가변함수는, 매개변수의 숫자가 정해지지 않은 함수 를 의미한다.
이는, 고정적인 매개변수의 숫자가 아닌 전체 매개변수의 숫자를 셈 하여 메모리가 허용하는 한 무한한 매개변수를 받아서 연산할 수 있다는 의미이다.
가변 함수를 사용하기 위해 사용하는 라이브러리는
#include <stdarg> 를 사용하고,
- va_list
- 가변인자 목록을 나타내는 타입으로 받아온 모든 매개변수를 배열로 받아와서 처리한다.
- va_start
- va_list타입의 변수와 가변인자의 마지막 인자 이전의 인자의 위치값을 받아온다. 그 후 초기화 작업을 진행해준다.
- va_arg
- 가변인자 목록에서 값을 가져오는 함수로, va_list 타입의 변수와 가져올 값의 타입을 전달받는다. va_arg 함수는 va_lsit 변수에서 내부 count를 사용하여 한개씩 배열을 넘기면서 주소값을 가져온다.
- va_end
- 가변함수가 종료될 때 호출하는 함수로, va_list타입의 변수를 전달받은 뒤 메모리를 전부 날려준다. free와 delete와 동작은 같다.
를 가변함수 내부에 넣는다.
다음 코드 예시를 통해 살펴보자.
다음 코드에서는, 가변인자를 받아서 받은 인수를 전부 더해주는 함수이다.
11번째 줄에서는 va_list를 통해 lists 이라는 이름의 동적배열을 하나 생성해준다.
12번째 줄에서는 va_list 타입인 lists 를 받아오고, count를 통해 최대배열사이즈 를 받아온다.
15번째 줄에서는 va_arg 가 va_list타입인 lists를 받아오고 현재 위치의 형식을 받아온다. 배열에 가져온 데이터타입은 int 이기 때문에, int가 들어갔다. 그 후 출력해온 배열을 sum에 중첩덧샘한다.
18번째 줄은 lists의 사용이 종료되었음으로 동적메모리를 반환해준다.
다음은 출력이다.
출력값을 잘 보면 2 3 2 인데,
이는 전채 배열의 최대값이 3 으로 들어갔기 때문에, 1와 2와 3만이 더해져서 평균이 도출되었기 때문이다.
배열의 최대값이 인수의 전체값보다 적게되면 매개변수가 전부 사용되지 않을 수 있음으로 사용에 유의가 필요하다.
728x90
'컴퓨터 용어 정리' 카테고리의 다른 글
객체 지향적 프로그래밍 OOP (Object Oriented Programming) (0) | 2023.04.22 |
---|---|
절차 지향적 프로그래밍 POP (Procedural Oriented Programming) (0) | 2023.04.22 |
C++ 함수 포인터 라이브러리( functional ) (0) | 2023.04.20 |
C++ 어썰트(Assert) (0) | 2023.04.20 |
함수 템플릿(Function Template) (0) | 2023.04.20 |