va_arg
|
헤더 파일에 정의됨
<stdarg.h>
|
||
|
T va_arg
(
va_list ap, T
)
;
|
||
va_arg
매크로는
T
타입의 표현식으로 확장되며, 이는
va_list
ap
에서 다음 매개변수에 해당합니다.
va_arg
를 호출하기 전에,
ap
는 반드시
va_start
또는
va_copy
호출로 초기화되어야 하며, 그 사이에
va_end
호출이 없어야 합니다.
va_arg
매크로를 호출할 때마다
ap
는 다음 가변 인자를 가리키도록 수정됩니다.
다음 인자의 타입이 ap (프로모션 후) 호환되지 않는 경우 , T 와의 동작은 정의되지 않으며, 다음 경우를 제외합니다:
- 한 타입은 부호 있는 정수 타입이고, 다른 타입은 해당하는 부호 없는 정수 타입이며, 값이 두 타입 모두에서 표현 가능한 경우; 또는
- 한 타입은 void 에 대한 포인터이고 다른 타입은 문자 타입에 대한 포인터인 경우.
만약
va_arg
가
ap
에 더 이상 인수가 없을 때 호출되면, 동작은 정의되지 않습니다.
목차 |
매개변수
| ap | - | va_list 타입의 인스턴스 |
| T | - | ap 내 다음 매개변수의 타입 |
확장된 값
ap 의 다음 가변 매개변수
예제
#include <math.h> #include <stdarg.h> #include <stdio.h> double stddev(int count, ...) { double sum = 0; double sum_sq = 0; va_list args; va_start(args, count); for (int i = 0; i < count; ++i) { double num = va_arg(args, double); sum += num; sum_sq += num*num; } va_end(args); return sqrt(sum_sq / count - (sum / count) * (sum / count)); } int main(void) { printf("%f\n", stddev(4, 25.0, 27.3, 26.9, 25.7)); }
출력:
0.920258
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.16.2.2 The va_arg 매크로 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.16.1.1 The va_arg 매크로 (p: TBD)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.16.1.1 The va_arg 매크로 (p: 269-270)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.15.1.1 va_arg 매크로 (p: 249-250)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.8.1.2 va_arg 매크로
참고 항목
|
(C99)
|
가변 인자 함수 인수의 복사본을 생성합니다
(함수 매크로) |
|
가변 인자 함수 인수의 순회를 종료합니다
(함수 매크로) |
|
|
va_start
,
va_arg
,
va_end
, 및
va_copy
에 필요한 정보를 보유합니다
(typedef) |
|
|
가변 인자 함수 인수에 대한 접근을 활성화합니다
(함수 매크로) |
|
|
C++ documentation
for
va_arg
|
|