【问题标题】:What does ... means in c code [duplicate]......在c代码中是什么意思[重复]
【发布时间】:2017-06-04 21:24:56
【问题描述】:

我正在阅读wiredtiger 的代码。我看到一个函数定义为

WT_CURSOR::set_key(WT_CURSOR * cursor, ...)

这里的“...”是什么意思?编译器如何编译这样的代码?

谢谢

【问题讨论】:

  • 表示可以跟随可变数量的参数。
  • @zvi 这个问题是关于模板参数包的,而不是关于可变数量的参数。
  • int printf(const char *format [, argument] ... );等库函数原型中
  • 观察::: 表示代码是 C++ 而不是 C。

标签: c wiredtiger


【解决方案1】:

这意味着函数在命名参数之后接受可变数量的参数(可能为零)。该函数将使用 va_list 和相关函数(va_startva_argva_end)来处理参数。

一个例子:

#include <stdio.h>
#include <stdarg.h>

// n: number of doubles
// ... list of doubles
double average(int n, ...)
{
    double accum = 0.0;
    int i;
    va_list vl;
    va_start(vl, n);

    for(i = 0; i < n; i++)
    {
        accum += va_arg(vl, double);
    }
    va_end(vl);
    return accum/(double)n;
}

int main()
{
    double avg = average(5, 1.0, 1.0, 6.5, 3.3, -5.8);
    printf("%f\n", avg);
    return 0;
}

输出:1.200000

【讨论】:

  • 谢谢,我刚刚读到这个artical,我仍然对第一个参数感到困惑。在有线老虎的情况下,``` WT_CURSOR *cursor; session->create(session, "table:kvtab", "key_format=S,value_format=S"); session->open_cursor(session, "table:kvtab", NULL, NULL, &cursor); cursor->set_key(cursor, "key1");```这里第一个参数是什么意思?
  • @zhihuifan 第一个参数是哪个?就像我上面所说的,参数的数量取决于表的 key 部分中的列数(与 table 的 value 部分中的 set_value 类似)。所以这取决于这个电话session-&gt;create(session, "table:kvtab", "key_format=S,value_format=S")
  • 如果你不了解wiredtiger的API,我建议你看看sophia数据库系统是如何处理相同语义的。
猜你喜欢
  • 2013-05-07
  • 2023-01-26
  • 2015-10-08
  • 2013-05-15
  • 2013-10-06
  • 2014-03-23
  • 2017-10-16
  • 2017-08-21
  • 2017-02-17
相关资源
最近更新 更多