va_start
cppreference.net에서
| 헤더에 정의됨 <stdarg.h>
|
||
void va_start( va_list ap, parmN );
|
(C23까지) | |
void va_start( va_list ap, ... );
|
(C23부터) | |
이 va_start 매크로는 변수 인수들명명된 인수 parmN(C23까지) 뒤에 오는 것들에 접근할 수 있게 합니다.
va_start 유효한 va_list 객체의 인스턴스와 함께 호출되어야 하며ap va_arg에 대한 호출 전에 이루어져야 합니다.
|
만약 |
(C23까지) |
|
만약 |
(C23부터) |
매개변수
| ap | - | va_list 타입의 인스턴스 |
| parmN | - | 첫 번째 가변 매개변수 앞에 오는 명명된 매개변수 |
전개 값
(없음)
예제
이 코드 실행
#include <stdarg.h>
#include <stdio.h>
int add_nums_C99(int count, ...)
{
int result = 0;
va_list args;
va_start(args, count); // count can be omitted since C23
for (int i = 0; i < count; ++i)
result += va_arg(args, int);
va_end(args);
return result;
}
#if __STDC_VERSION__ > 201710L
// Same as above, valid since C23
int add_nums_C23(...)
{
int result = 0;
va_list args;
va_start(args);
int count = va_arg(args, int);
for (int i = 0; i < count; ++i)
result += va_arg(args, int);
va_end(args);
return result;
}
#endif
int main(void)
{
printf("%d\n", add_nums_C99(4, 25, 25, 50, 50));
#if __STDC_VERSION__ > 201710L
printf("%d\n", add_nums_C23(4, 25, 25, 50, 50));
#endif
}
가능한 출력:
150
150
참조
- C23 표준 (ISO/IEC 9899:2024):
- 7.16.1.4 va_start 매크로 (p: 290-292)
- C17 표준 (ISO/IEC 9899:2018):
- 7.16.1.4 va_start 매크로 (p: 198-199)
- C11 표준 (ISO/IEC 9899:2011):
- 7.16.1.4 va_start 매크로 (p: 271-272)
- C99 표준 (ISO/IEC 9899:1999):
- 7.16.1.4 va_start 매크로 (p: 251-252)
- C89/C90 표준 (ISO/IEC 9899:1990):
- 4.8.1.1 va_start 매크로
같이 보기
| 다음 가변 인수 함수 인수에 접근 (함수 매크로) | |
(C99) |
가변 인수 함수 인수의 복사본을 만듦 (함수 매크로) |
| 가변 인수 함수 인수 순회를 종료 (함수 매크로) | |
| va_start, va_arg, va_end, 및 va_copy 에 필요한 정보를 보유(typedef) | |
C++ 문서 for va_start
| |