Apa yang disebut (...) dalam C dan C ++?

30

Salah satu kegunaan dari ...adalah untuk menunjukkan entitas variadic di C dan C ++.

Apa namanya?

Apakah itu diklasifikasikan sebagai operator atau sesuatu yang lain ketika digunakan dengan cara itu?

Ada detail lain tentang ...?

Sunting: Saya tahu tujuan .... Saya bertanya tentang nama dan klasifikasinya, yang saya harap, serupa dalam C dan C ++.

Ardent Coder
sumber
1
Fungsi variadic C dan argumen template variadic C ++ sangat berbeda, bisakah Anda memberikan konteks di mana Anda menemukannya? (PS, C / C ++ tidak ada, silakan pilih satu)
JVApen
1
Saya hanya ingin tahu nama dan klasifikasinya
Ardent Coder

Jawaban:

43

Ini adalah salah satu dari punctuator .

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

Dalam deklarasi fungsi itu disebut elipsis .


Ellipsis juga digunakan oleh beberapa Cekstensi bahasa kompiler . Contoh - gcc switch / ekstensi rentang kasus

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__
sumber
1
Namun, ketika salah satu komentar dalam pertanyaan saya menyebutkan tentang paket parameter, mengapa Anda tidak menyebutkannya dalam jawaban Anda?
Ardent Coder
3
Tautan ke Standar C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
pmg
5
@ArdentCoder: Ini masih disebut elipsis di C ++, bahkan untuk paket parameter.
Nicol Bolas
4
Saya ingin menambahkan bahwa ...itu bukan operator, karena tidak dapat membentuk bagian dari ekspresi (dalam arti 'ekspresi' yang didefinisikan oleh C11 §6.5 ). Ini memiliki lebih banyak kesamaan dengan { }dan ;daripada dengan punctuator lainnya.
zwol
1
@ zwol Di C ++ token ...dapat menjadi bagian dari ekspresi. Tapi itu tidak dianggap sebagai operator oleh sintaks formal.
aschepler
8

Ini ...disebut sebagai elipsis dalam bahasa Inggris dan dalam standar C.

Ahmed Masud
sumber
8

Salah satu kegunaan dari ... adalah untuk menunjukkan entitas variadic dalam C dan C ++. `

Ya, Dalam istilah awam ...dapat dianggap sebagai menunjukkan lebih dari satu atau kelipatan (seperti dalam tanda baca pseudo-kode kita kadang-kadang menggunakan beberapa titik untuk menyerupai jenis yang berbeda) dari kasus penggunaan, yang jika kita mempertimbangkan variadics (menjadi multipel dalam arti argumen / parameter 'beragam') dalam C ++, ini akan merujuk ke sejumlah variabel argumen untuk fungsi atau template.

Apa namanya?

Elipsis

Apakah itu diklasifikasikan sebagai operator atau sesuatu yang lain ketika digunakan dengan cara itu?

Tidak, itu jelas bukan operator karena memungkinkan Anda untuk melewati sejumlah argumen, tidak beroperasi pada mereka.

Adakah detail lain tentang ...?

Sejauh yang aku tahu -

  1. Ini adalah specifier khusus;
  2. Elips selalu berada di urutan terakhir dalam daftar argumen;
  3. Sejauh penggunaannya, itu hanya digunakan ketika Anda ingin menghapus batas jumlah parameter untuk templat / fungsi atau ketika Anda harus memiliki sejumlah parameter yang dapat diperluas untuk ekspansi. (Yaitu memberikan ekspansi paket parameter dalam templat kelas variadic atau templat fungsi) Dalam praktiknya kita sebagian besar memerlukan seperangkat parameter yang diketahui tetap, sehingga tidak berlaku untuk kebanyakan kasus;
  4. Ini dapat digunakan dengan sizeofoperator, karena diklasifikasikan sebagai ekspansi paket juga.

Sunting: Saya tahu tujuan ...saya bertanya tentang nama dan klasifikasinya, yang saya harap, serupa dalam C dan C ++.

Namanya sama, tetapi penggunaannya bisa bervariasi untuk C ++ dan C.

Saya hanya terbiasa dengan penggunaannya dalam bahasa sebelumnya. (Aku ingat memiliki masalah HackerRank pada Variadics , meliputi utilitas.)

Anirban166
sumber
3

Urutan tiga pemberhentian penuh ...disebut elipsis di C dan C ++


Dalam C ++, elipsis membantu menginisialisasi dan memperluas berbagai jenis paket .

  • A parameter pack- ketika ada elipsis antara tipe dan pengenal
    Type ... identifier

  • A pack expansion- terdiri dari pola dan elipsis
    pattern...

Andreas DM
sumber