va_start
| Definiert in Header <stdarg.h>
|
||
void va_start( va_list ap, parmN );
|
(bis C23) | |
void va_start( va_list ap, ... );
|
(seit C23) | |
Das va_start Makro ermöglicht den Zugriff auf die variablen Argumentedie auf das benannte Argument folgen parmN(bis C23).
va_start muss mit einer Instanz eines gültigen va_list Objekts ap vor jedem Aufruf von va_arg aufgerufen werden.
|
Wenn |
(bis C23) |
|
Wenn mehr als ein Argument für |
(seit C23) |
Parameter
| ap | - | eine Instanz des va_list Typs |
| parmN | - | der benannte Parameter, der dem ersten variablen Parameter vorausgeht |
Erweiterter Wert
(keiner)
Beispiel
#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
}
Mögliche Ausgabe:
150
150
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
- 7.16.1.4 Das va_start-Makro (S. 290-292)
- C17-Standard (ISO/IEC 9899:2018):
- 7.16.1.4 Das va_start-Makro (S. 198-199)
- C11-Standard (ISO/IEC 9899:2011):
- 7.16.1.4 Das va_start-Makro (S. 271-272)
- C99-Standard (ISO/IEC 9899:1999):
- 7.16.1.4 Das va_start-Makro (S. 251-252)
- C89/C90-Standard (ISO/IEC 9899:1990):
- 4.8.1.1 Das va_start-Makro
Siehe auch
| greift auf das nächste variadische Funktionsargument zu (Funktionsmakro) | |
(C99) |
erstellt eine Kopie der variadischen Funktionsargumente (Funktionsmakro) |
| beendet die Traversierung der variadischen Funktionsargumente (Funktionsmakro) | |
| enthält die Informationen, die von va_start, va_arg, va_end, und va_copy (Typedef) | |
C++-Dokumentation für va_start
| |