함수에 가변 인수 목록

변수 목록은 함수 선언 된 인수 목록에서 줄임표 (...)를 사용 하 여 설명에 따라 가변 인수 목록.형식 및 STDARG에서 설명 하는 매크로 사용 합니다.H 파일 변수 목록으로 전달 되는 액세스 인수에 포함 됩니다.이러한 매크로 대 한 자세한 내용은 참조 하십시오. va_arg, va_end, va_start 에서 C 런타임 라이브러리에 대 한 설명서입니다.

예제

다음 예제는 어떻게 va_start, va_arg, 및 va_end 매크로 작동과 함께 va_list 형식 (STDARG를 선언 합니다.H):

// variable_argument_lists.cpp
#include <stdio.h>
#include <stdarg.h>

//  Declaration, but not definition, of ShowVar.
void ShowVar( char *szTypes, ... );
int main() {
   ShowVar( "fcsi", 32.4f, 'a', "Test string", 4 );
}

//  ShowVar takes a format string of the form
//   "ifcs", where each character specifies the
//   type of the argument in that position.
//
//  i = int
//  f = float
//  c = char
//  s = string (char *)
//
//  Following the format specification is a variable 
//  list of arguments. Each argument corresponds to 
//  a format character in the format string to which 
// the szTypes parameter points 
void ShowVar( char *szTypes, ... ) {
   va_list vl;
   int i;

   //  szTypes is the last argument specified; you must access 
   //  all others using the variable-argument macros.
   va_start( vl, szTypes );

   // Step through the list.
   for( i = 0; szTypes[i] != '\0'; ++i ) {
      union Printable_t {
         int     i;
         float   f;
         char    c;
         char   *s;
      } Printable;

      switch( szTypes[i] ) {   // Type to expect.
         case 'i':
            Printable.i = va_arg( vl, int );
            printf_s( "%i\n", Printable.i );
         break;

         case 'f':
             Printable.f = va_arg( vl, double );
             printf_s( "%f\n", Printable.f );
         break;

         case 'c':
             Printable.c = va_arg( vl, char );
             printf_s( "%c\n", Printable.c );
         break;

         case 's':
             Printable.s = va_arg( vl, char * );
             printf_s( "%s\n", Printable.s );
         break;

         default:
         break;
      }
   }
   va_end( vl );
}
  

설명

이전 예제에서는 이러한 중요 한 개념을 보여 줍니다.

  • 목록 표시자 형식의 변수로 설정 해야 va_list 의 모든 가변 인수 전에.앞의 예제에서 마커 라고 vl.

  • 각각의 인수를 사용 하 여 액세스 되는 va_arg 매크로.알려야 합니다는 va_arg 매크로 스택에서 올바른 수의 바이트를 전송할 수 있도록 검색 인수의 형식이 있습니다.호출 프로그램에 의해 제공 되는 서로 다른 크기의 형식이 잘못 지정 하면 va_arg, 그 결과 예측할 수 없습니다.

  • 사용 하 여 얻은 결과 명시적으로 캐스팅 해야 합니다는 va_arg 매크로 종류.

  • 호출 해야는 va_end 매크로 가변 인수 처리를 종료할 수 있습니다.

참고 항목

참조

C + + 함수 정의