본문 바로가기
프로그래밍

Valiable Arguments

by 건우아빠유리남편 2009. 7. 19.
반응형


#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

댓글