我在查看wiredtiger的代碼。我看到一個函數定義爲什麼意思?在c代碼的意思是
WT_CURSOR::set_key(WT_CURSOR * cursor, ...)
什麼是「...」的意思嗎?編譯器如何編譯這樣的代碼?
由於
我在查看wiredtiger的代碼。我看到一個函數定義爲什麼意思?在c代碼的意思是
WT_CURSOR::set_key(WT_CURSOR * cursor, ...)
什麼是「...」的意思嗎?編譯器如何編譯這樣的代碼?
由於
這意味着函數接受命名的參數(可能爲零)之後的可變數量的參數。該函數將使用va_list
和相關函數(va_start
,va_arg
和va_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](https://linuxprograms.wordpress.com/2008/03/07/c-variable-argument-list-access/),我仍然對第一個參數感到困惑。在有線手機的情況下,'''WT_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
@zhihuifan哪一個是第一個參數?就像我上面所說的那樣,參數的數量取決於表的關鍵部分的列數(類似地,表中值部分的set_value)。所以它取決於這個調用'session-> create(session,「table:kvtab」,「key_format = S,value_format = S」) – amirouche
如果你不明白wiredtiger的API,我建議你看看索菲亞數據庫系統如何處理相同的語義。 – amirouche
它意味着參數可變數目可以遵循。 –
請看這裏:https://stackoverflow.com/questions/39792417/what-does-this-three-dots-means-in-c – zvi
@zvi這個問題是關於模板參數包,而不是可變數量的參數。 – HolyBlackCat