공부 중 메모/수업 예제 (KGCA)

Cpp 가변인자함수 예제

라이피 (Lypi) 2018. 7. 18. 01:44
반응형

출처 : KGCA 게임 아카데미(http://www.kgcaschool.com/). 수업 예제 파일


가변 인자 함수 

써본적은 있는데 내용 정리 필요.



참고

코딩 도장 : 가변 인자 함수 사용하기

soen.kr 

MSDN



variableFactor.h

#pragma once

#include <iostream> //initializer_list, vfprintf
#include <initializer_list> //initializer_list
#include <cstdarg> //va_list
using std::cout;
using std::endl;
using std::initializer_list;

bool g_debug = false;

#pragma region C_style
void debugOut(const char* str, ...)
{
	va_list ap;
	if (g_debug)
	{
		va_start(ap, str);
		//vfprintf of vprintf를 사용해야한다
	    //printf 함수를 사용하면 안됨.
		vfprintf(stderr, str, ap);
		va_end(ap);
	}
}

void printInts(int num, ...)
{
	int temp;
	va_list ap;
	va_start(ap, num);
	for (int iCnt = 0; iCnt < num; iCnt++) {
		temp = va_arg(ap, int);
		cout << temp << " ";
	}
	va_end(ap);
	cout << endl;
}
#pragma endregion

#pragma region C++11_style
//int만 초기화된다.
int makeSum(initializer_list<int> Ist)
{
	int total = 0;
	for (auto iter = Ist.begin(); iter != Ist.end(); ++iter) {
		total += (*iter);
	}
	return total;
}
#pragma endregion

variableFactor.cpp

#include "variableFactor.h"

int main()
{
	g_debug = true;
	debugOut("int %d\n", 5);
	debugOut("String %s and int %d\n", "hello", 5);
	debugOut("Many inis : %d, %d, %d, %d, %d\n", 1, 2, 3, 4, 5);

	printInts(5, 1, 2, 3, 4, 5);

	int a = makeSum({ 1,2,3,4,5 });
	cout << a << endl;
	//int b = makeSum({ 1,2,3,3.0 }); // 한가지 타입만 가능하기 때문에 오류남.
}


반응형