C 和 C++ 中的 (...) 是什么?

Ard*_*der 30 c c++ terminology ellipsis variadic

的用途之一...是在 C 和 C++ 中表示可变参数实体。

它叫什么名字?

以这种方式使用时,它是否归类为运算符或其他东西?

关于 的任何其他细节...

编辑: 我知道.... 我问的是它的名称和分类,我希望它在 C 和 C++ 中都相似。

P__*_*J__ 44

它是标点符号之一

6.4.6  Punctuators
Syntax punctuator:
     one of  [    ]    (    )    {   }    .    ->
             ++   --   &    *    +   -    ~    !
             /    %    <<   >>   <   >    <=   >=    ==   !=   ^   |   &&   ||
             ?    :    ;    ...
             =    *=   /=   %=   +=  -=   <<=  >>=   &=   ^=   |=
             ,    #    ##
             <:   :>   <%   %>   %:   %:%:
Run Code Online (Sandbox Code Playgroud)

在函数声明中,它被称为省略号


省略号也被一些编译器C语言扩展使用。示例 - gcc switch/case 范围扩展

const char *test(unsigned num)
{
    switch(num)
    {
        case 0 ... 9:
            return "the value is in the 0 to 9 range";
        case 10 ... 99:
            return "the value is in the 10 to 99 range";
        default:
            return "out of tested range";
    }
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/YBLma-

  • @ArdentCoder:在 C++ 中它仍然被称为省略号,即使对于参数包也是如此。 (5认同)
  • 我想补充一点,`...` _不是_ 运算符,因为它不能构成_表达式_ 的一部分(在 [C11 §6.5](http://port70.net/~nsz/c 定义的“表达式”的意义上) /c11/n1570.html#6.5))。与其他标点符号相比,它与 `{` `}` 和 `;` 有更多共同点。 (4认同)
  • C11 标准链接:http://port70.net/~nsz/c/c11/n1570.html#6.4.6 (3认同)

Ahm*_*sud 10

...被称为一个省略号用英语和C标准。


Ani*_*166 8

... 的用途之一是在 C 和 C++ 中表示可变参数实体。`

是的,在外行人的术语中...可以被认为是表示一个用例的多个(如在伪代码标点符号中,我们有时使用多个点来模拟不同类型),如果我们考虑可变参数(在某种意义上是多个) C++ 中的“可变”参数/参数),它指的是函数或模板的可变数量的参数。

它叫什么名字?

省略

以这种方式使用时,它是否归类为运算符或其他东西?

不,它绝对不是运算符,因为它允许您传递任意数量的参数,而不是对它们进行操作

关于……的任何其他细节?

据我所知 -

  1. 它是一个特殊的说明符;
  2. 省略号总是出现在参数列表的最后;
  3. 就其用法而言,它仅在您想要取消模板/函数的参数数量限制或需要具有可扩展的参数数量进行扩展时使用。(即它在可变参数类模板或函数模板中提供参数包扩展)实际上我们大多需要一组固定的已知参数,因此不适用于大多数情况;
  4. 它可以与sizeof运算符一起使用,因为它也被归类为包扩展。

编辑:我知道...我询问它的名称和分类的目的,我希望在 C 和 C++ 中都相似。

名称相同,但 C++ 和 C 的用法可能有所不同。

我只熟悉它在前一种语言中的使用。(我记得有一个HackerRank问题Variadics,覆盖其效用。)