favicon Jay Lee DevLog

📚 목차

오늘은 가변인자에 대해

간단하게 살펴보려 한다.

 

일단 가변인자를 사용하기 위해서는

#include <stdarg.h>

해당 헤더를 포함시켜줘야 한다.

 

가변인자가 무엇인지 얘기하자면,

일반적인 2수의 덧셈의 경우

int sum(int a, int b)
{
   return a + b;
}

이런 식으로 간단하게 처리 할 수 있다.

 

그런데 만약..더해야 하는 수가

몇 십개, 몇 백개가 된다면?

이런 경우에 일일히 다 매개변수와 return 부분을 수정해야 할까?

 

아니다.

이럴 때 사용하는게 바로 가변인자다.

 

사용하는 방법은 다음과 같다.

int sum(int a, ...)

이런 식으로 매개변수에 "..."을 사용하면 가변인자를 사용하겠다이다.

이 "..."에는 몇 십, 몇 백개의 매개변수가 들어와도 사용 할 수 있다.

 

그럼 가변인자는 어떻게 구분하여 사용할까?

바로 va_list를 사용하여 처리할 수 있다.

int sum(int a, ...)
{
   va_list vl;
   va_start(vl, a);
 
   int nResult = 0;
   for (int i=0; i < a; i++)
     nResult += va_arg(vl, int);
   va_end(vl);

   return nResult;
}

핵심 부분만 정리하자면,

 

va_list vl; // 가변인자를 저장할 리스트이다.

va_start(vl, a); // 가변인자 리스트인 vl에 a 값을 시작 점으로 하겠다.

nResult += va_arg(vl, int); //  vl에 있는 값을 int 형으로 시작점부터 뽑아내겠다.

va_end(vl); // NULL 처리라고 보면 된다.

 

이제 sum을 사용해보면,

int main()
{
   int a = 10, b = 20, c = 30, d = 99, e = 120;
   cout << sum(5, a, b, c, d, e) << endl;
}

a~e의 값을 더한 279가 나오는 걸 확인할 수 있다.

 

여기서 궁금증이 하나 생길 수 있는데,

sum 함수 호출 부분에

전체 카운트를 지칭하는 5의 숫자를 빼면 어떻게 될까?

 

일단

for (int i=0; i < 5; i++)

전체 카운트가 없어졌기 떄문에

임의로 여기에 a를 5로 바꿔주고(정확히 하려면 4를 넣어줘야 한다.)

cout << sum(a, b, c, d, e) << endl;

돌려보면,

269가 나온다.

첫 번째 인자값인 10이 빠진 결과 값이다.

즉, va_start(vl, a); 에 두번째 인자로 들어간 값은

제외하고 계산된다는 걸 알 수 있다.

 

그러니 정상적으로 sum을 실행하려면

맨 처음 값은 카운트를 넣어주는 이유다.

이 부분을 주의해서 사용해야 한다.

 

 

'C, C++ > 기술노트' 카테고리의 다른 글

람다식  (0) 2023.07.27
Template  (0) 2023.07.26
stringstream 공부  (0) 2023.06.29

+ Recent posts

/ /

Contact

📧 dlwjdwls60@naver.com


블로그에 내용이 있으면 해당 글을 보여주며, 없으면 내용이 복사된 채로 ChatGPT로 연결됩니다.