오늘은 가변인자에 대해
간단하게 살펴보려 한다.
일단 가변인자를 사용하기 위해서는
해당 헤더를 포함시켜줘야 한다.
가변인자가 무엇인지 얘기하자면,
일반적인 2수의 덧셈의 경우
이런 식으로 간단하게 처리 할 수 있다.
그런데 만약..더해야 하는 수가
몇 십개, 몇 백개가 된다면?
이런 경우에 일일히 다 매개변수와 return 부분을 수정해야 할까?
아니다.
이럴 때 사용하는게 바로 가변인자다.
사용하는 방법은 다음과 같다.
이런 식으로 매개변수에 "..."을 사용하면 가변인자를 사용하겠다이다.
이 "..."에는 몇 십, 몇 백개의 매개변수가 들어와도 사용 할 수 있다.
그럼 가변인자는 어떻게 구분하여 사용할까?
바로 va_list를 사용하여 처리할 수 있다.
핵심 부분만 정리하자면,
va_list vl; // 가변인자를 저장할 리스트이다.
va_start(vl, a); // 가변인자 리스트인 vl에 a 값을 시작 점으로 하겠다.
nResult += va_arg(vl, int); // vl에 있는 값을 int 형으로 시작점부터 뽑아내겠다.
va_end(vl); // NULL 처리라고 보면 된다.
이제 sum을 사용해보면,
a~e의 값을 더한 279가 나오는 걸 확인할 수 있다.
여기서 궁금증이 하나 생길 수 있는데,
sum 함수 호출 부분에
전체 카운트를 지칭하는 5의 숫자를 빼면 어떻게 될까?
일단
전체 카운트가 없어졌기 떄문에
임의로 여기에 a를 5로 바꿔주고(정확히 하려면 4를 넣어줘야 한다.)
돌려보면,
269가 나온다.
첫 번째 인자값인 10이 빠진 결과 값이다.
즉, va_start(vl, a); 에 두번째 인자로 들어간 값은
제외하고 계산된다는 걸 알 수 있다.
그러니 정상적으로 sum을 실행하려면
맨 처음 값은 카운트를 넣어주는 이유다.
이 부분을 주의해서 사용해야 한다.
'C, C++ > 기술노트' 카테고리의 다른 글
람다식 (0) | 2023.07.27 |
---|---|
Template (0) | 2023.07.26 |
stringstream 공부 (0) | 2023.06.29 |