Namespaces
Variants

Variadic functions

From cppreference.net
< c

가변 인수 함수는 가변 개수의 인수를 받는 함수입니다 (예: printf ).

가변 인수 함수의 선언은 마지막 매개변수로 줄임표를 사용합니다, 예를 들어 int printf ( const char * format, ... ) ; . 구문과 자동 인수 변환에 대한 추가 세부 사항은 가변 인수 를 참조하십시오.

함수 본문에서 가변 인자에 접근하려면 다음 라이브러리 기능들을 사용합니다:

목차

타입
va_start , va_arg , va_end , 그리고 va_copy 에 필요한 정보를 보유함
(typedef)
매크로
헤더 파일에 정의됨 <stdarg.h>
가변 인수 함수 인수에 대한 접근을 활성화함
(함수 매크로)
다음 가변 인수 함수 인수에 접근함
(함수 매크로)
(C99)
가변 인수 함수 인수의 복사본을 만듦
(함수 매크로)
가변 인수 함수 인수의 순회를 종료함
(함수 매크로)

예제

다양한 타입의 값을 출력합니다.

#include <stdarg.h>
#include <stdio.h>
void simple_printf(const char* fmt, ...)
{
    va_list args;
    for (va_start(args, fmt); *fmt != '\0'; ++fmt)
    {
        switch(*fmt)
        {
            case 'd':
            {
                int i = va_arg(args, int);
                printf("%d\n", i);
                break;
            }
            case 'c':
            {
                // A 'char' variable will be promoted to 'int'
                // A character literal in C is already 'int' by itself
                int c = va_arg(args, int);
                printf("%c\n", c);
                break;
            }
            case 'f':
            {
                double d = va_arg(args, double);
                printf("%f\n", d);
                break;
            }
            default:
                puts("Unknown formatter!");
                goto END;
        }
    }
END:
    va_end(args);
}
int main(void)
{
    simple_printf("dcff", 3, 'a', 1.969, 42.5);
}

출력:

3
a
1.969000
42.50000

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.16 가변 인자 <stdarg.h> (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.16 가변 인자 <stdarg.h> (p: TBD)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.16 가변 인수 <stdarg.h> (p: 269-272)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.15 가변 인자 <stdarg.h> (p: 249-252)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.8 가변 인자 <stdarg.h>

참고 항목

C++ 문서 참조: Variadic functions