(Cv) được gọi trong C và C ++ là gì?


30

Một trong những ứng dụng của ...là để biểu thị variadic thực thể trong C và C ++.

Tên của nó là gì?

Nó được phân loại là một toán tử hoặc cái gì khác khi được sử dụng theo cách đó?

Bất kỳ chi tiết khác liên quan ...?

Chỉnh sửa: Tôi biết mục đích của .... Tôi đang hỏi về tên và phân loại của nó, mà tôi hy vọng, là tương tự trong cả C và C ++.


1
Điều này có trả lời câu hỏi của bạn không? Trong một khai báo hàm C, "..." là tham số cuối cùng làm gì?
Ajay Dabas

1
Các hàm matrixdic và các đối số khuôn mẫu C ++ hoàn toàn khác nhau, bạn có thể đưa ra bối cảnh mà bạn tìm thấy nó không? (PS, C / C ++ không tồn tại, vui lòng chọn một)
JVApen

1
Tôi chỉ muốn biết tên và phân loại của nó
Ardent Coder

Câu trả lời:


43

Đây là một trong những dấu chấm câu .

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

Trong khai báo hàm nó được gọi là dấu chấm lửng .


Ellipsis cũng được sử dụng bởi một số Cphần mở rộng ngôn ngữ trình biên dịch . Ví dụ - gcc switch / mở rộng phạm vi trường hợp

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-


1
Tuy nhiên, là một trong những ý kiến ​​trong câu hỏi của tôi được đề cập về các gói tham số, tại sao bạn không đề cập đến nó trong câu trả lời của bạn?
Ardent

3
Liên kết với các tiêu chuẩn C11: port70.net/~nsz/c/c11/n1570.html#6.4.6
PMG

5
@ArdentCoder: Nó vẫn được gọi là dấu chấm lửng trong C ++, ngay cả đối với các gói tham số.
Nicol Bolas

4
Tôi muốn nói thêm rằng ...không một nhà điều hành, bởi vì nó không thể là một phần của một biểu hiện (theo nghĩa của 'biểu hiện' định nghĩa bởi C11 §6.5 ). Nó có nhiều điểm chung với { };hơn với các dấu chấm câu khác.
zwol

1
@zwol Trong C ++, mã thông báo ...có thể là một phần của biểu thức. Nhưng nó không được coi là một toán tử theo cú pháp chính thức.
aschepler

8

...được gọi là dấu chấm lửng cả bằng tiếng Anh và tiêu chuẩn C.


8

Một trong những cách sử dụng của ... là để biểu thị các thực thể dao động trong C và C ++. `

Có, theo thuật ngữ của giáo dân ...có thể được coi là biểu thị nhiều hơn một hoặc bội số (như trong dấu câu mã giả, đôi khi chúng ta sử dụng nhiều dấu chấm để giống với các loại khác nhau) của trường hợp sử dụng, nếu chúng ta xem xét các từ sai (nghĩa là nhiều trong số các đối số / tham số 'khác nhau' trong C ++, nó sẽ đề cập đến một số lượng đối số khác nhau cho các hàm hoặc mẫu.

Tên của nó là gì?

Dấu chấm lửng

Nó được phân loại là một toán tử hoặc cái gì khác khi được sử dụng theo cách đó?

Không, đó chắc chắn không phải là một toán tử vì nó cho phép bạn vượt qua bất kỳ số lượng đối số nào, không hoạt động trên chúng.

Bất kỳ chi tiết nào khác liên quan đến ...?

Theo như tôi biết -

  1. Đó là một specifier đặc biệt;
  2. Dấu chấm lửng luôn xuất hiện cuối cùng trong danh sách đối số;
  3. Theo như cách sử dụng của nó, nó chỉ được sử dụng khi bạn muốn loại bỏ các giới hạn về số lượng tham số cho một mẫu / hàm hoặc khi bạn yêu cầu phải có số lượng tham số mở rộng để mở rộng. (tức là nó cung cấp mở rộng gói tham số trong mẫu lớp dao động hoặc mẫu hàm) Trong thực tế, chúng tôi chủ yếu yêu cầu một tập hợp các tham số đã biết cố định, do đó không áp dụng được cho hầu hết các trường hợp;
  4. Nó có thể được sử dụng với sizeoftoán tử, vì nó được phân loại là mở rộng gói.

Chỉnh sửa: Tôi biết mục đích của ...tôi đang hỏi về tên và phân loại của nó, mà tôi hy vọng, là tương tự trong cả C và C ++.

Tên giống nhau, nhưng cách sử dụng có thể khác nhau đối với C ++ và C.

Tôi chỉ quen thuộc với việc sử dụng nó trong ngôn ngữ cũ. (Tôi nhớ có vấn đề về HackerRank trên Variadics , bao gồm tiện ích của nó.)


3

Chuỗi ba điểm dừng đầy đủ ...được gọi là dấu chấm lửng trong cả C và C ++


Trong C ++, dấu chấm lửng giúp khởi tạo và mở rộng các loại gói khác nhau .

  • A parameter pack- khi có dấu chấm lửng giữa loại và mã định danh
    Type ... identifier

  • A pack expansion- bao gồm một mẫu và dấu chấm lửng
    pattern...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.