使用可变函数C ++

时间:2013-12-13 07:59:40

标签: c++ variadic-functions

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

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

现在我想为用户提供额外的可行性,以提供他想要的普通字符串。 喜欢 - GetMessage("Here is my message")

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

我试过

val_list vl;
va_start(vl,format);

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

但它的行为非常一致。

有人可以建议我更好地了解可变参数函数是否有参数或没有参数?

1 个答案:

答案 0 :(得分:2)

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

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

你有时可以通过注入一个标记的宏调用它们来促进可变参数的可靠使用,而一些编译器可以让你背负他们的printf()样式参数检查(例如GCC)。