私は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 * cursor; session-> create(セッション、 "テーブル:kvtab"、 "key_format = S、value_format = S"); session-> open_cursor(セッション、 "テーブル:kvtab"、NULL、NULL、&カーソル);カーソル - > set_key(カーソル、 "key1"); '' '最初のパラメータはここで何を意味しますか? – zhihuifan
@ zhihuifanどちらが最初のパラメータですか?上で述べたように、引数の数はテーブルのキー部分のカラム数に依存します(同様に、テーブルのvalue部分の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