Jak nazywają się (…) w C i C ++?

30

Jednym z zastosowań ...jest do określenia zmiennej liczbie argumentów podmiotów w C i C ++.

Jak się nazywa?

Czy jest sklasyfikowany jako operator lub coś innego, gdy jest używany w ten sposób?

Wszelkie inne szczegóły dotyczące ...?

Edycja: Znam cel .... Pytam o jego nazwę i klasyfikację, które, mam nadzieję, są podobne zarówno w C, jak i C ++.

Ardent Coder
źródło
1
Czy to odpowiada na twoje pytanie? W deklaracji funkcji C, co robi „...” jako ostatni parametr?
Ajay Dabas
1
Funkcje variadic C i argumenty variadic C ++ są całkowicie różne, czy możesz podać kontekst, w którym je znalazłeś? (PS, C / C ++ nie istnieje, proszę wybrać jeden)
JVApen
1
Chcę tylko poznać jego nazwę i klasyfikację
Ardent Coder

Odpowiedzi:

43

To jeden z znaków interpunkcyjnych .

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

W deklaracji funkcji nazywa się to elipsą .


Ellipsis jest także używany przez niektóre Crozszerzenia języka kompilatora . Przykład - przełącznik gcc / rozszerzenie zakresu obudowy

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__
źródło
1
Jednakże, ponieważ w jednym z komentarzy w moim pytaniu wspomniałem o pakietach parametrów, dlaczego nie wspomniałeś o tym w swojej odpowiedzi?
Ardent Coder
3
Link do standardu C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg
5
@ArdentCoder: W C ++ nadal jest nazywany wielokropkiem, nawet w przypadku pakietów parametrów.
Nicol Bolas
4
Dodam, że ...to nie operator, ponieważ nie może stanowić część wypowiedzi (w sensie „wyrażenia” zdefiniowanej przez C11 § 6.5 ). To ma więcej wspólnego z { }a ;niż z innymi punctuators.
zwolnienie
1
@zwol W C ++ token ...może być częścią wyrażenia. Ale formalna składnia nie uważa tego za operator .
aschepler
8

...Jest określany jako wielokropek zarówno w języku angielskim oraz w standardzie C.

Ahmed Masud
źródło
8

Jednym z zastosowań ... jest oznaczanie różnych jednostek w C i C ++. '

Tak, w kategoriach laika ...można uznać, że oznacza więcej niż jeden lub wielokrotność (jak w interpunkcji pseudokodu, czasami używamy wielu kropek, aby przypominać różne typy) przypadku użycia, dla którego, jeśli weźmiemy pod uwagę warianty (w sensie wielokrotność „zmiennych” argumentów / parametrów) w C ++, odwoływałby się do zmiennej liczby argumentów funkcji lub szablonów.

Jak się nazywa?

Elipsa

Czy jest sklasyfikowany jako operator lub coś innego, gdy jest używany w ten sposób?

Nie, zdecydowanie nie jest to operator, ponieważ pozwala przekazać dowolną liczbę argumentów, a nie operować nimi.

Wszelkie inne szczegóły dotyczące ...?

O ile mi wiadomo -

  1. Jest to specjalny specyfikator;
  2. Elipsa zawsze pojawia się na końcu listy argumentów;
  3. Jeśli chodzi o jego użycie, jest on używany tylko wtedy, gdy chcesz usunąć ograniczenia liczby parametrów dla szablonu / funkcji lub gdy potrzebujesz mieć rozszerzalną liczbę parametrów do rozszerzenia. (tzn. zapewnia rozszerzenie pakietu parametrów w szablonie klasy variadic lub szablonie funkcji) W praktyce wymagamy głównie ustalonego zestawu znanych parametrów, więc nie ma zastosowania w większości przypadków;
  4. Może być używany z sizeofoperatorem, ponieważ jest również klasyfikowany jako rozszerzenie pakietu.

Edycja: Znam cel ...pytania o jego nazwę i klasyfikację, które, mam nadzieję, są podobne zarówno w C, jak i C ++.

Nazwa jest taka sama, ale użycie może się różnić dla C ++ i C.

Znam tylko jego użycie w poprzednim języku. (Pamiętam, że miałem problem z HackerRank na Variadics , obejmujący jego użyteczność).

Anirban166
źródło
3

Sekwencja trzech kropek ...nazywa się elipsą zarówno w C, jak i C ++


W C ++ elipsa pomaga inicjalizować i rozszerzać różnego rodzaju paczki .

  • A parameter pack- gdy między typem a identyfikatorem występuje elipsa
    Type ... identifier

  • A pack expansion- składa się ze wzoru i elipsy
    pattern...

Andreas DM
źródło