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
|