때로는 미리 정의된 수의 매개변수 대신 다양한 수의 인수, 즉 매개변수를 사용할 수 있는 함수를 갖고 싶을 때 상황이 발생할 수 있습니다. C/C++ 프로그래밍 언어는 이러한 상황에 대한 솔루션을 제공하며 요구 사항에 따라 다양한 수의 매개변수를 허용할 수 있는 함수를 정의할 수 있습니다. 다음 예는 그러한 함수의 정의를 보여줍니다.
int func(int, ... ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); }
함수 func()에는 마지막 인수가 타원으로 표시됩니다. 즉, 세 개의 점(...)이 있고 타원 바로 앞의 인수는 전달된 총 변수 인수를 나타내는 항상 int입니다. 이러한 기능을 사용하려면 가변 인수의 기능을 구현하고 주어진 단계를 따르기 위한 기능과 매크로를 제공하는 stdarg.h 헤더 파일을 사용해야 합니다. -
-
마지막 매개변수를 줄임표로 사용하여 함수를 정의하고 줄임표 바로 앞의 매개변수는 항상 int 인수의 수를 나타냅니다.
-
va_list 만들기 함수 정의에 변수를 입력합니다. 이 유형은 stdarg.h 헤더 파일에 정의되어 있습니다.
-
int 사용 매개변수 및 va_start va_list를 초기화하는 매크로 변수를 인수 목록에 추가합니다. 매크로 va_start는 stdarg.h 헤더 파일에 정의되어 있습니다.
-
va_arg 사용 매크로 및 va_list 인수 목록의 각 항목에 액세스하는 변수입니다.
-
매크로 va_end 사용 va_list에 할당된 메모리 정리 변수.
이제 위의 단계를 따라 다양한 수의 매개변수를 사용하여 평균을 반환할 수 있는 간단한 함수를 작성해 보겠습니다. -
예시 코드
#include <iostream> #include <cstdarg> using namespace std; double average(int num,...) { va_list valist; double sum = 0.0; int i; va_start(valist, num); //initialize valist for num number of arguments for (i = 0; i < num; i++) { //access all the arguments assigned to valist sum += va_arg(valist, int); } va_end(valist); //clean memory reserved for valist return sum/num; } int main() { cout << "Average of 2, 3, 4, 5 = "<< average(4, 2,3,4,5) << endl; cout << "Average of 5, 10, 15 = "<< average(3, 5,10,15)<< endl; }
출력
Average of 2, 3, 4, 5 = 3.5 Average of 5, 10, 15 = 10