1

私はこの質問に答えました。va_list引数を繰り返してもらうにはどうすればよいですか?そして、珍しい関数宣言に気づきました:

void ordered(int num1, double list ...);

最初に私はコンパイラが文句を言うだろうと思ったが、clang 3.2は文句を言わず、g++4.7.2も文句を言わなかった。

この宣言は何に拡張されますか?それは何として解釈されますか?

編集:省略記号について知っています。ただし、通常の形式は<return type> <function-name>(<argument1-type> <arg-name>, ...);、例ではコンマが欠落しています。

4

5 に答える 5

3

それは次と同じです:

void ordered(int num1, double list, ...);
于 2013-03-27T13:41:44.403 に答える
3

これは、C++標準の文法の抜粋です。

parameter-declaration-clause:
  parameter-declaration-list[opt] ...[opt]
  parameter-declaration-list , ...

基本的に、省略記号の前に,他のパラメーター宣言がある場合は前に付けることができますが、そうである必要はありません。関数宣言:

void f(int,double...);

本当に意味する:

void f(int,double,...);
于 2013-03-27T13:46:42.223 に答える
2
于 2013-03-27T13:48:16.570 に答える
1

3つのドット(...)は「省略記号」と呼ばれ、可変引数リストを示します。したがって、必要な数の引数を渡すことができます(ただし、OSで指定された制限があります)。このように、printfたとえば、動作します。

詳細については、こちらをご覧ください。

于 2013-03-27T13:42:22.267 に答える
1

「…」という意味だと思いますよね?

一部の関数では、呼び出しで予期されるすべての引数の数とタイプを指定することはできません。このような関数は、引数宣言のリストを省略記号(...)で終了することによって宣言されます。

于 2013-03-27T13:42:57.810 に答える