C++ Chapter 7.14 : 생략 부호

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 7. 함수 : 생략 부호

  • 매개변수의 개수가 정해져 있지 않으면 좋겠을 때 사용한다.
  • 가변 인수라고도 한다.
  • #include <cstdarg> 를 해주어야 사용할 수 있다.
  • pintf 함수 이런 것도 가변 인수로 구현된 함수라서 매개변수의 개수를 아주 다양하게 호출할 수 있다.
    printf("%d %d", a, b);
    printf("%f = %d + %f", a, b, c);
    
  • 사용을 권장하지는 않는다고 한다.
#include <iostream>
#include <cstdarg> //for ellipsis

using namespace std;

double findAverage(int count, ...) 
{
	double sum = 0;

	va_list list; 

	va_start(list, count); 
		for (int arg = 0; arg < count; ++arg)
		    sum += va_arg(list, int); 
	va_end(list); 
	
	return sum / count;
}
  • double findAverage(int count, ...)
    • 가변 인수로 구현됐다.
    • int count : 인수의 개수가 될 것이다. 미리 설정하여 넘겨야 하는 고정 인수.
    • ... : 명령 인수의 타입과 개수 생략
  • va_list list
    • 가변 인수를 읽기 위한 포인터 변수 list
    • va_list는 char * 포인터 타입이다.
      • 인수를 문자열로 받음
  • va_start(list, count)
    • list가 첫번째 가변인수를 읽도록 초기화 한다.
    • 두번째 매개변수는 고정 인수로 꼭 들어가야 한다.
      • 인수 몇개 읽어야 할지 알아야 하니까
  • va_arg(list, int)
    • 가변 인수들을 실제로 읽는 명령
    • 어떤 타입으로 읽을 것인지
      • list 포인터에 문자열로 읽은 인수를 int로 변환하여 반환해준다.
  • va_end(list);
    • 가변 인수들을 다 읽은 후 종료
int main()
{
	cout << findAverage(1, 1, 2, 3, "Hello", 'c') << endl;
	cout << findAverage(3, 1, 2, 3) << endl;
	cout << findAverage(10, 1, 2, 3, 4, 5) << endl;
	return 0;
}
  • findAverage(1, 1, 2, 3, “Hello”, ‘c’)
    • 1 개만 읽겠다.
    • 그러므로 두번째 인수인 1만 인수로 들어가고
    • 나머지 2 3 “Hello” ‘c’는 무시된다.
    • 결과 👉 1 출력
  • findAverage(3, 1, 2, 3)
    • 3 개만 읽겠다.
    • 그러므로 1 2 3 이 인수로 들어간다.
    • 결과 👉 2 출력 (1 2 3의 평균)
  • findAverage(10, 1, 2, 3, 4, 5)
    • 10 개만 읽겠다.
    • 인수로 1 2 3 4 5 가 들어가고 나머지 5개는 이상한 수가 들어가게 된다.
    • 결과 👉 이상한 수로 출력 됨


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기