본문 바로가기
프로그래밍/C언어

가변 인수

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 8.



printf나 scanf를 보면 함수지만 보내지는 인자값이 매번 틀리다는걸 알 수 있다.
그렇다면 어떻게 그게 가능한 것인가?

가변 인수에 대해서 알아보자


#include <stdio.h>
#include <stdarg.h>

void printChar( int n1, ... );	// ... 이 부분이 가변 인수를 생성한다.

void main()
{
	printChar(3, 'A','B','C');
	printChar(4, 'A','B','C','D');
	printChar(5, 'A','B','C','D','E');	// 실행 예
}

void printChar( int n1, ... )
{
	va_list varl;	// va_list 타입의 변수 생성(무조건)
	char str[6];	// 실제로는 동적 할당을 해서 써야겠지만,
	int i;

	va_start(varl, n1);	// va_start( va_list 타입의 인자, 인자의 갯수 )
	
	for( i=0; i<n1; i++ )
	{
		str[i] = va_arg(varl, char);	// va_arg( va_list 타입의 인자, 넘어가는 타입의 형식(char,int...))
	}
	str[i] = '\0';

	printf( "%s\n", str ); 

	va_end(varl);	// 모든 상황이 끝났을 때 va_list 타입을 종료
}




결과를 보면 알 수 있듯이 함수에 보내주는 인자의 갯수만 있다면, 얼마든지 인자를 늘릴 수 있다. printf와 scanf는 이것 보단 훨씬 복잡 하겠지만, 가변 인수라는것이 존재 한다는 것이라도 기억하자.
중요한건 가변 인자를 받는 함수는 최소한 1개(인자의 갯수)를 파악할 수 있는 변수를 주어야 한다는 것이다.

'프로그래밍 > C언어' 카테고리의 다른 글

함수 포인터  (0) 2010.03.09
2차원 배열 동적 할당  (0) 2010.03.09
문자열과 배열  (0) 2010.03.08
재귀 호출  (0) 2010.03.08
bit연산자 - & | ^ << >> (3)  (0) 2010.03.08