tail head cat sleep
QR code linking to this page

Man page  — STDARG

명칭

stdarg – 변수 인수 리스트

내용

서식

#include <stdarg.h>

void
va_start(va_list ap, last);

type
va_arg(va_list ap, type);

void
va_end(va_list ap);

해설

함수는 다양한 형태의 다양한 수의 인수로 호출할 수 있습니다. 인클루드 파일 < stdarg.h> (은)는, 형태 ( va_list) (을)를 선언해, 불려 가는 함수에는 숫자와 형태가 미지의 인수 리스트를 스텝 하기 위해서 3 개의 매크로를 정의합니다.

불려 가는 함수는, va_list 형태의 오브젝트를 선언할 필요가 있습니다. 이것은, 매크로 va_start(), va_arg(), va_end() 에 의해 사용됩니다.

va_start() 매크로는, va_arg() (와)과 va_end() 하지만 후에 사용한다 ap (을)를 초기화해, 최초로 호출할 필요가 있습니다.

파라미터 last (은)는 변수 인수 리스트의 전의 마지막 파라미터의 이름입니다. 즉, 호출 함수가 형태를 인식하고 있는 마지막 파라미터입니다.

이 파라미터의 주소는 va_start() 매크로로 사용되므로, 레지스터 변수 또는 함수 또는 배열형으로서 선언해 되지 않습니다.

va_start() 매크로는 값을 돌려주지 않습니다.

va_arg() 매크로는, 호출의 다음의 인수의 형태와 값이 있는 식에 전개됩니다. 파라미터 ap (은)는, va_start() 에 의해 초기화된다 va_listap 입니다. va_arg() (이)가 호출할 것에 ap (은)는 수정되어 다음의 호출이 다음의 인수를 돌려줍니다. 파라미터 type (은)는, 지정형의 오브젝트를 가리키는 포인터의 형태가 * 를 type 에 추가하는 것만으로 얻을 수 있도록(듯이) 지정된 형명입니다.

다음의 인수가 없는 경우, 또는 type 하지만 (디폴트의 인수 생성에 따라 생성된 것 같은) 실제의 다음의 인수의 형태와 호환성이 없는 경우, 랜덤인 에러가 발생합니다.

va_start() 매크로의 뒤의 최초의 va_arg() 매크로의 사용에 의해, last 의 후의 인수가 돌려주어집니다. 연속적인 호출에 의해, 나머지의 인수의 값이 돌려주어집니다.

va_end() 매크로는, 변수 인수 리스트가 va_start() 에 의해 초기화되는 함수의 정상적인 귀가를 취급합니다.

va_end() 매크로는 값을 돌려주지 않습니다.

사용예

함수 foo (은)는, 형식 캐릭터의 string를 채택해 형태를 기초로 해 각 형식 캐릭터에 대응하는 인수를 인쇄합니다.
void foo(char *fmt, ...)
{
        va_list ap;
        int d;
        char c, *s;

        va_start(ap, fmt);         while (*fmt)                 switch(*fmt++) {                 case 's':                       /* string */                         s = va_arg(ap, char *);                         printf("string %s\n", s);                         break;                 case 'd':                       /* 정수 */                         d = va_arg(ap, int);                         printf("int %d\n", d);                         break;                 case 'c':                       /* 캐릭터 */                         /* 주의: 캐릭터는 정수를 생성한다. */                         c = va_arg(ap, int);                         printf("char %c\n", c);                         break;                 }         va_end(ap); }

표준

va_start(), va_arg(), va_end() 의 각 매크로는 ISO/IEC 9899:1990 ("ISO C90") 에 적합하고 있습니다.

호환성

이러한 매크로는, 옮겨놓을 수 있는 역사적인 매크로와 호환성이 후방 호환 버젼은 인클루드 파일 < varargs.h> 의 안에 있습니다.

버그

varargs 매크로와 달리, stdarg 매크로에서는, 프로그래머는, 고정한 인수가 없다 함수를 작성할 수가 없습니다. 이 문제는, 주로 varargs 코드를 stdarg 코드로 변환할 때 작업을 일으키게 합니다만, vfprintf(3) (와)과 같이, va_list 인수를 취하는 함수에 모든 인수를 건네주려고 하는 각종의 함수에 대해서도 곤란을 생기게 합니다.

STDARG (3) June 5, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

How's my programming? Call 1-800-DEV-NULL