티스토리 뷰

Visual Studio 2012


변인수를 알아보고 이를 활용해 로그를 저장해보자.


대표적인 가변인수를 다루는 함수인 printf.

printf("%d %s", n1, "Hello");


위의 함수 인수들 중 처음 "" 부분인 format을 제외하고는 뒤에 변수의 개수가 일정치 않다.

이를 가변 인수라 하고, 위의 함수는 가변인수 함수라고 한다.


1. 가변인수 함수의 기본적 형태


자료형 함수이름(자료형 고정인수, ...)

{

va_list va;

va_start(va, 고정인수);

va_arg(va,자료형);

va_end(va);

}


주의사항

1) 고정인수는 무조건 하나 이상이어야 한다.

2) 고정인수가 두개 이상일 경우, va_start에는 가변인수 바로 앞인 마지막 고정인수를 넣어야한다.


2. 가변인수 사용하기(로그 저장)


header.h

// 가변인수 활용 헤더 포함
#include <stdarg.h>

void AddLog(char* format, ...);


main.cpp

void AddLog(char* format, ...)
{
	char buf[512]="Result: ";
	va_list va;
	va_start(va, format);
	vsprintf(buf+strlen(buf), format, va);
	va_end(va);
	puts(buf);
}

int main()
{
	int a,b;
	a=1;
	b=2;
	AddLog("%d + %d = %d", a,b,a+b);
	
	return 0;
}


이렇게 작성하였을 경우 출력은

Result: 1 + 2 = 3 이란 값이 정상적으로 출력된다.

vsprintf의 인자들을 살펴보면

1) buf+strlen(buf)를 통해 초기에 값을 적어놓은 "Result: "이후 부터 format을 저장할 수 있게 한다.

2) 512-strlen(buf)를 통해 값을 저장할 최대 바이트 수를 정한다.

3) format과 va는 고정인자와 가변인자이다.



댓글