Comment s'appelle le (…) en C et C ++?

30

L'une des utilisations de ...est de désigner des entités variadiques en C et C ++.

Quel est son nom?

Est-il classé comme opérateur ou autre chose lorsqu'il est utilisé de cette façon?

D'autres détails concernant ...?

Edit: je connais le but de .... Je pose des questions sur son nom et sa classification, qui, je l'espère, sont similaires en C et en C ++.

Ardent Coder
la source
1
Est-ce que cela répond à votre question? Dans une déclaration de fonction C, que signifie "..." comme le dernier paramètre?
Ajay Dabas
1
Les fonctions C variadic et les arguments de modèle C + variadic sont complètement différents, pouvez-vous donner le contexte dans lequel vous l'avez trouvé? (PS, C / C ++ n'existe pas, veuillez en choisir un)
JVApen
1
Je veux juste connaître son nom et sa classification
Ardent Coder

Réponses:

43

C'est l'un des ponctuateurs .

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

Dans la déclaration de fonction, il est appelé les points de suspension .


Ellipsis est également utilisé par certaines Cextensions du langage de compilation . Exemple - Commutateur GCC / extension de plage de boîtier

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__
la source
1
Cependant, comme l'un des commentaires de ma question a mentionné les packs de paramètres, pourquoi ne l'avez-vous pas mentionné dans votre réponse?
Ardent Coder
3
Lien vers la norme C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg
5
@ArdentCoder: Cela s'appelle toujours des points de suspension en C ++, même pour les packs de paramètres.
Nicol Bolas
4
J'ajouterais que ce ...n'est pas un opérateur, car il ne peut pas faire partie d'une expression (au sens d '«expression» définie par C11 §6.5 ). Il a plus en commun avec { }et ;qu'avec les autres ponctuateurs.
Zwol
1
@zwol En C ++, le jeton ...peut faire partie d'une expression. Mais il n'est pas considéré comme un opérateur par la syntaxe formelle.
aschepler
8

Le ...est appelé des points de suspension à la fois en anglais et dans la norme C.

Ahmed Masud
la source
8

L'une des utilisations de ... est de désigner des entités variadiques en C et C ++.

Oui, en termes simples, ...on peut penser à désigner plus d'un ou plusieurs (comme dans la ponctuation pseudo-code, nous utilisons parfois plusieurs points pour ressembler à différents types) d'un cas d'utilisation, pour lequel si nous considérons les variadiques (étant multiples dans le sens d'arguments / paramètres «variables») en C ++, cela ferait référence à un nombre variable d'arguments pour des fonctions ou des modèles.

Quel est son nom?

Ellipse

Est-il classé comme opérateur ou autre chose lorsqu'il est utilisé de cette façon?

Non, ce n'est certainement pas un opérateur car il vous permet de passer un certain nombre d'arguments, pas de les exploiter .

D'autres détails concernant ...?

Pour autant que je sache -

  1. C'est un spécificateur spécial;
  2. Les points de suspension viennent toujours en dernier dans la liste des arguments;
  3. En ce qui concerne son utilisation, il n'est utilisé que lorsque vous souhaitez supprimer les limites du nombre de paramètres pour un modèle / une fonction ou lorsque vous avez besoin d'un nombre extensible de paramètres pour l'expansion. (c'est-à-dire qu'il fournit une extension du pack de paramètres dans un modèle de classe variadique ou un modèle de fonction) En pratique, nous avons principalement besoin d'un ensemble fixe de paramètres connus, il n'est donc pas applicable à la plupart des cas;
  4. Il peut être utilisé avec l' sizeofopérateur, car il est également classé comme une extension de pack.

Edit: Je sais que le but de ...je pose des questions sur son nom et sa classification, qui j'espère, est similaire en C et C ++.

Le nom est le même, mais l'utilisation peut varier pour C ++ et C.

Je ne connais que son utilisation dans l'ancienne langue. (Je me souviens avoir eu un problème HackerRank sur Variadics , couvrant son utilité.)

Anirban166
la source
3

La séquence de trois points... est appelée des points de suspension en C et C ++


En C ++, les points de suspension permettent d'initialiser et d'étendre différents types de packs .

  • A parameter pack- lorsqu'il y a des points de suspension entre le type et l' identifiant
    Type ... identifier

  • A pack expansion- se compose d'un motif et d'une ellipse
    pattern...

Andreas DM
la source