설명 -

가변 인수로도 불리는데 아무튼, 가변 이라는 말처럼 그 수가 변하는 파라미터를 받아들이는 함수를 지칭하는 말이다. 간단하고도 가까운 예제로 primtf가 존재한다.


기능 및 특징 -

받지 않을 수도, 여러 개를 받을 수도 있다. printf를 보면 서식 문자를 여러개 넣기도 하고 아니기도 하지 않는가? 이 또한 그와 같다. 사용 하고 싶은 만큼만 사용할 수 있다.


사용 방법 예시 및 이해도 -







     typedef char *  va_list;


     #define va_start _crt_va_start
     #define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
     #define _ADDRESSOF(v)   ( &reinterpret_cast<const char &>(v) )
     #define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

     #define va_arg _crt_va_arg
     #define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

     #define va_end _crt_va_end
     #define _crt_va_end(ap)      ( ap = (va_list)0 )



내부를 보면 이처럼 정의가 되어있는데, 아직 확실히 이해하기는 어렵다.

(추가 수정 필요)


장단점 및 비교 -

printf를 사용할 때, 한 문장에 한 서식밖에 못쓴다 고 생각해보자.. 그럼 10개의 정보를 표기하기 위해서는 10번의 별도의 printf를 써주어야하는데.. 이것은 너무도 불편한 일이다. 가변 이라는 특성은 적을 때도, 많을 때도 호환할 수 있는 장점이 된다.


첨부 자료 -


가변인자 함수.cpp



참고한 주소 및 정보 -
http://blog.naver.com/endfirst/20003220224




'프로그래밍' 카테고리의 다른 글

JSON 이란?  (0) 2016.01.21
가변인자(Variable Arguments) 함수  (0) 2015.03.31
Posted by GENESIS8

댓글을 달아 주세요