Use a macro instead of a function to avoid unpacking va_list args twice.