Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 가변 인수 수

<시간/>

때로는 미리 정의된 수의 매개변수 대신 다양한 수의 인수, 즉 매개변수를 사용할 수 있는 함수를 갖고 싶을 때 상황이 발생할 수 있습니다. 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