---
title: "withVaList(_:_:)"
framework: swift
role: symbol
role_heading: Function
path: "swift/withvalist(_:_:)"
---

# withVaList(_:_:)

Invokes the given closure with a C va_list argument derived from the given array of arguments.

## Declaration

```swift
func withVaList<R>(_ args: [any CVarArg], _ body: (CVaListPointer) -> R) -> R
```

## Parameters

- `args`: An array of arguments to convert to a C va_list pointer.
- `body`: A closure with a CVaListPointer parameter that references the arguments passed as args. If body has a return value, that value is also used as the return value for the withVaList(_:) function. The pointer argument is valid only for the duration of the function’s execution.

## Mentioned in

Using Imported C Functions in Swift

## Return Value

Return Value The return value, if any, of the body closure parameter.

## Discussion

Discussion The pointer passed as an argument to body is valid only during the execution of withVaList(_:_:). Do not store or return the pointer for later use. If you need to pass an optional pointer as a CVarArg argument, use the Int(bitPattern:) initializer to interpret the optional pointer as an Int value, which has the same C variadic calling conventions as a pointer on all supported platforms.

## See Also

### C Variadic Functions

- [CVaListPointer](swift/cvalistpointer.md)
- [CVarArg](swift/cvararg.md)
- [getVaList(_:)](swift/getvalist(_:).md)
