#include <stdio.h>
// 가변 인자를 가지는 함수. ==> ... : 컴파일러에게 인자 확인을 행략 해달라는 의미. !
// 핵심 : 전달된 인자를 꺼낼수 있어야 한다. !!
#include <stdarg.h>
// minprintf : The C Programming language 에 있는 코드 입니다
// (1988년) 설명은 별로 지만 예제가 너무나 좋은 책 입니다 나중에 예제만 꼭 한번 보세요.
// printf("%d %s %c %f", ); // 만들어 보고 싶다..ㅋ
void foo(...); 모두 가변인자.
//c++ : ok;
//c : 1번째 인자는 이름이 있어야.
int printf( const char* , ...)
{
}
void main()
{
int n =20;
printf( "%d \n" ); // 컴파일 에러가 나올까 ?
// 에러 확인이 안됀다.
// 실행시 잘못된 결과나 에러가 나올수 있다.
// 조심해서 사용해야 한다.
}
/*
int sum( int n , ...)
{
int s = 0 , i;
va_list ap; //일종의 포인터 (char* 정도로 생각)
va_start( ap, n ); // ap가 n의 뒤를 가르키도록 한다.
for ( i = 0; i < n; ++i)
s += va_arg( ap , int); // 1. ap에서 int 만큼 꺼내기
// 2. ap자신은 int 만큼 이동
va_end( ap ); // ap는 컴파일러 마다 구현이 다를수 있다.
// 혹 ap가 사용한 자원(메모리)등을 해지 하기 위해..
// 가변 인자를 사용 했다면 반드시 제일 아래 있어야 한다.
return s;
}
void main()
{
int s = sum (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 );
printf("%d\n",s);
}
/*
/*
void foo(int n, ...)
{
printf("foo\n");
}
void main()
{
foo(1);
foo( 1, 2 );
foo("adfk", 3,4, 4);
}
*/
/*
void main()
{
int a = 10;
printf("a = %d",a);
}
*/
// 잘문 : printf()함수의 인자의 갯수는 ? - 1개 이상. stack 이 허용하는 거기 까지.!!
'프로그래밍' 카테고리의 다른 글
MS Access2007에서 DBCC 명령(인덱스 초기화) 하기... (3) | 2009.07.23 |
---|---|
Void Pointer (0) | 2009.07.19 |
typedef에 관하여 (0) | 2009.07.19 |
Quick Sort (0) | 2009.07.19 |
Function Pointer EX (0) | 2009.07.19 |
댓글