2017-06-04 68 views
1

我在查看wiredtiger的代碼。我看到一個函數定義爲什麼意思?在c代碼的意思是

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

什麼是「...」的意思嗎?編譯器如何編譯這樣的代碼?

由於

+0

它意味着參數可變數目可以遵循。 –

+0

請看這裏:https://stackoverflow.com/questions/39792417/what-does-this-three-dots-means-in-c – zvi

+0

@zvi這個問題是關於模板參數包,而不是可變數量的參數。 – HolyBlackCat

回答

6

這意味着函數接受命名的參數(可能爲零)之後的可變數量的參數。該函數將使用va_list和相關函數(va_start,va_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

+0

謝謝,我剛剛讀了[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

+0

@zhihuifan哪一個是第一個參數?就像我上面所說的那樣,參數的數量取決於表的關鍵部分的列數(類似地,表中值部分的set_value)。所以它取決於這個調用'session-> create(session,「table:kvtab」,「key_format = S,value_format = S」) – amirouche

+0

如果你不明白wiredtiger的API,我建議你看看索菲亞數據庫系統如何處理相同的語義。 – amirouche