2011-03-16 5 views
5
CASE expr_no_commas ELLIPSIS expr_no_commas ':' 

tôi thấy như một quy tắc trong quy tắc cú pháp c, nhưng khi tôi cố gắng tái tạo nó:Làm thế nào để sử dụng dấu ba chấm trong câu lệnh case của c?

int test(float i) 
{ 
switch(i) 
{ 
    case 1.3: 
    printf("hi"); 
} 
} 

Nó không ...

+0

Tại sao bạn nghĩ rằng lược là giai đoạn đơn ? Đó là ... biểu tượng, tức là ba giai đoạn sẽ là phỏng đoán đầu tiên của tôi. – unwind

+1

chuyển đổi trên 'float' khi biểu diễn nhị phân không chính xác là nguy hiểm. – Benoit

+0

có thể trùng lặp của [Phạm vi câu lệnh chuyển đổi Simulater/Generated in c] (http://stackoverflow.com/questions/4680502/simulater-generated-switch-statement-range-in-c) –

Trả lời

11

OK, điều này liên quan đến một chút phỏng đoán về phía tôi, nhưng có vẻ như bạn đang nói về một phần mở rộng gcc cho C cho phép một phạm vi xác định trong các trường hợp switch.

Sau đây biên dịch cho tôi:

int test(int i) 
{ 
    switch(i) 
    { 
    case 1 ... 3: 
    printf("hi"); 
    } 
} 

Lưu ý ... và cũng lưu ý rằng bạn không thể chuyển đổi trên một float.

8

ELLIPSIS nghĩa ..., không .. Tuyên bố phải như sau:

#include <stdio.h> 

int main() { 
    int x; 
    scanf("%d", &x); 

    switch (x) { 
     case 1 ... 100: 
      printf("1 <= %d <= 100\n", x); 
      break; 
     case 101 ... 200: 
      printf("101 <= %d <= 200\n", x); 
      break; 
     default: 
      break; 
    } 

    return 0;  
} 

BTW, đây là non-standard extension of gcc. Trong tiêu chuẩn C99 tôi không thể tìm thấy cú pháp này.

+0

Điều này khá thú vị! – assem

+1

@assem Điều này là khá không di động. Đừng làm điều đó, sử dụng if/else. –

+0

+1 Jim, @assem, Đừng bị lôi cuốn bởi điều "khá thú vị" này. – Microkernel

10

Đây không phải là tiêu chuẩn C, xem 6.8.4.2:

Các biểu hiện của từng trường hợp nhãn phải là một số nguyên không đổi biểu

+0

+1 để trích dẫn! –