프로그래밍 공부
작성일
2023. 4. 20. 22:09
작성자
WDmil
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