¿Cómo se llama el (...) en C y C ++?

30

Uno de los usos de ...es denotar entidades variadas en C y C ++.

¿Cual es su nombre?

¿Se clasifica como operador u otra cosa cuando se usa de esa manera?

¿Algún otro detalle con respecto ...?

Editar: sé el propósito de .... Estoy preguntando sobre su nombre y clasificación, que espero sea similar tanto en C como en C ++.

Codificador ardiente
fuente
1
Las funciones variadas de C y los argumentos de plantilla variada de C ++ son completamente diferentes, ¿puede dar el contexto en el que lo encontró? (PS, C / C ++ no existe, elija uno)
JVApen
1
Solo quiero saber su nombre y clasificación
Ardent Coder

Respuestas:

43

Es uno de los puntuadores .

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

En la declaración de función se llama puntos suspensivos .


Ellipsis también es utilizado por algunas Cextensiones de lenguaje de compilación . Ejemplo: interruptor gcc / extensión de rango de caso

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";
    }
}

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

P__J__
fuente
1
Sin embargo, como uno de los comentarios en mi pregunta mencionó sobre los paquetes de parámetros, ¿por qué no lo mencionó en su respuesta?
Codificador ardiente
3
Enlace al estándar C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg
55
@ArdentCoder: Todavía se llama puntos suspensivos en C ++, incluso para paquetes de parámetros.
Nicol Bolas
44
Agregaría que no... es un operador, porque no puede formar parte de una expresión (en el sentido de 'expresión' definida por C11 §6.5 ). Tiene más en común con y que con los otros signos de puntuación. { };
zwol
1
@zwol En C ++, el token ...puede ser parte de una expresión. Pero no se considera un operador por la sintaxis formal.
Aschepler
8

El ...se conoce como puntos suspensivos tanto en inglés como en el estándar C.

Ahmed Masud
fuente
8

Uno de los usos de ... es denotar entidades variadas en C y C ++.

Sí, en términos simples ...se puede considerar que denota más de uno o múltiplos (como en la puntuación de pseudocódigo, a veces usamos múltiples puntos para parecerse a diferentes tipos) de un caso de uso, para lo cual si consideramos las variables (en el sentido múltiple) de argumentos / parámetros 'variables') en C ++, se referiría a un número variable de argumentos para funciones o plantillas.

¿Cual es su nombre?

Elipsis

¿Se clasifica como operador u otra cosa cuando se usa de esa manera?

No, definitivamente no es un operador, ya que le permite pasar cualquier número de argumentos, no operarlos .

¿Algún otro detalle sobre ...?

Por lo que sé -

  1. Es un especificador especial;
  2. Los puntos suspensivos siempre son los últimos en la lista de argumentos;
  3. En lo que respecta a su uso, solo se usa cuando desea eliminar los límites en el número de parámetros para una plantilla / función o cuando necesita tener un número extensible de parámetros para la expansión. (es decir, proporciona expansión del paquete de parámetros en una plantilla de clase variable o plantilla de función) En la práctica, la mayoría de las veces requerimos un conjunto fijo de parámetros conocidos, por lo que no es aplicable a la mayoría de los casos;
  4. Se puede usar con el sizeofoperador, ya que también se clasifica como expansión de paquete.

Editar: sé el propósito de ...preguntar sobre su nombre y clasificación, que espero sea similar en C y C ++.

El nombre es el mismo, pero el uso puede variar para C ++ y C.

Solo estoy familiarizado con su uso en el idioma anterior. (Recuerdo haber tenido un problema de HackerRank en Variadics , que cubre su utilidad).

Anirban166
fuente
3

La secuencia de tres puntos completos ...se denomina puntos suspensivos tanto en C como en C ++


En C ++, los puntos suspensivos ayudan a inicializar y expandir diferentes tipos de paquetes .

  • A parameter pack- cuando hay puntos suspensivos entre el tipo y el identificador
    Type ... identifier

  • A pack expansion- consiste en un patrón y puntos suspensivos
    pattern...

Andreas DM
fuente