c++ - 使用可变参数函数 C++

标签 c++ variadic-functions

我在我的一个程序中使用可变参数函数。这是它的定义 -

std::string GetMessage(const char *format,...)

现在我想为用户提供额外的可行性,以提供他想要的纯字符串。 就像 - GetMessage("这是我的消息")

我在处理此类输入时遇到麻烦,带有变量的输入工作正常。

我尝试过

val_list vl;
va_start(vl,format);

if(strlen(vl) > 1) // TO check if va list has any arguments.

但它的行为非常不一致。

那么有人可以建议我更好的方法来了解可变参数函数是否有参数或没有参数吗?

最佳答案

调用者必须主动传递一些值,让被调用的 var/stdarg-using 函数知道参数结束的位置。常见技术包括:

  • 传递标记值,例如尾随 NULL
  • 通过计数
  • 传递一个格式字符串,其中嵌入的内容(例如 printf() 等的 % 前缀格式)暗示所需的参数数量

有时,您可以通过注入(inject)哨兵的宏来调用可变参数函数,从而促进可靠地使用它们,并且某些编译器允许您搭载其 printf() 样式参数检查(例如 GCC) .

关于c++ - 使用可变参数函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561695/

相关文章:

C++ Poco - 如何遍历 JSON 数组?

c++ - OpenAL 2d 平移 C++

c++ - 带引用和不带引用的指针类型转换

c++ - 将值分配给 vector 类型结构的问题

c++ - 可变函数模板基本案例 : without parameters or with one?

python - __init__,继承和可变参数

c++ - 我可以在这里摆脱嵌套的 for 循环吗?

c++ - 带括号和不带括号的可变参数之间的区别

Java Var-args 和增强的 for 循环编译器错误

c# - 为什么要使用 params 关键字?