Como é chamado (…) em C e C ++?


30

Um dos usos de ...é denotar entidades variadas em C e C ++.

Qual o nome disso?

É classificado como operador ou outra coisa quando usado dessa maneira?

Quaisquer outros detalhes sobre ...?

Edit: Eu sei o propósito de .... Estou perguntando sobre seu nome e classificação, que espero, seja semelhante em C e C ++.



11
Funções variadas em C e argumentos de modelos variados em C ++ são completamente diferentes. Você pode fornecer o contexto em que a encontrou? (PS, C / C ++ não existe, por favor escolha um)
JVApen

11
Eu só quero saber o seu nome e classificação
Ardent Coder

Respostas:


43

É um dos pontuadores .

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

Na declaração de função, isso é chamado de reticências .


As reticências também são usadas por algumas Cextensões de linguagem do compilador . Exemplo - extensão gcc switch / case range

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-


11
No entanto, como um dos comentários na minha pergunta mencionou pacotes de parâmetros, por que você não mencionou na sua resposta?
Ardent Coder

3
Link para o padrão C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg

5
@ArdentCoder: Ainda é chamado de reticências em C ++, mesmo para pacotes de parâmetros.
Nicol Bolas 11/01

4
Eu acrescentaria que não... é um operador, porque não pode fazer parte de uma expressão (no sentido de 'expressão' definido por C11 §6.5 ). Tem mais em comum com e do que com os outros pontuadores. { };
zwol 12/01

11
@zwol No C ++, o token ...pode fazer parte de uma expressão. Mas não é considerado um operador pela sintaxe formal.
aschepler


8

Um dos usos de ... é denotar entidades variadas em C e C ++. `

Sim, nos termos do leigo, ...pode-se considerar que denota mais de um ou múltiplos (como na pontuação do pseudo-código, às vezes usamos vários pontos para se parecer com tipos diferentes) de um caso de uso, para o qual se considerarmos variáveis ​​(sendo múltiplas no sentido de argumentos / parâmetros 'variáveis') em C ++, ele se refere a um número variável de argumentos para funções ou modelos.

Qual o nome disso?

Elipse

É classificado como operador ou outra coisa quando usado dessa maneira?

Não, definitivamente não é um operador, pois permite transmitir qualquer número de argumentos, não operar sobre eles.

Mais algum detalhe sobre ...?

Até onde sei -

  1. É um especificador especial;
  2. As reticências sempre vêm por último na lista de argumentos;
  3. No que diz respeito ao seu uso, ele é usado apenas quando você deseja remover os limites do número de parâmetros para um modelo / função ou quando você precisa ter um número extensível de parâmetros para expansão. (isto é, fornece expansão do pacote de parâmetros em um modelo de classe variável ou modelo de função) Na prática, geralmente exigimos um conjunto fixo de parâmetros conhecidos, portanto não é aplicável à maioria dos casos;
  4. Ele pode ser usado com o sizeofoperador, pois também é classificado como uma expansão de pacote.

Edit: Eu sei o propósito de ...que estou perguntando sobre seu nome e classificação, que espero, seja semelhante em C e C ++.

O nome é o mesmo, mas o uso pode variar para C ++ e C.

Estou familiarizado apenas com o seu uso no idioma antigo. (Lembro-me de ter um problema do HackerRank no Variadics , cobrindo sua utilidade.)


3

A sequência de três pontos completos ...é chamada de reticências em C e C ++


No C ++, as reticências ajudam a inicializar e expandir diferentes tipos de pacotes .

  • A parameter pack- quando houver reticências entre o tipo e o identificador
    Type ... identifier

  • A pack expansion- consiste em um padrão e uma elipse
    pattern...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.