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

我看到在C的語法規則,這樣的規則,但是當我嘗試重現它:如何在c的case語句中使用省略號?

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

它失敗...

+0

爲什麼你認爲省略號就是一個句號?這是......符號,即三個時期將是我的第一個猜測。 – unwind 2011-03-16 15:58:21

+1

當二進制表示不準確時切換「float」是危險的。 – Benoit 2011-03-16 15:59:42

+0

[Simulater/Generated switch statement range in c]可能的重複(http://stackoverflow.com/questions/4680502/simulater-generated-switch-statement-range-in-c) – 2011-03-16 16:02:13

回答

11

好的,這涉及到我的一些猜測,但看起來你正在談論C的gcc擴展,允許在switch的情況下指定範圍。

下編譯對我來說:

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

注意...,也請注意,您不能在float切換。

8

ELLIPSIS意味着...,不.。聲明應該是這樣的:

#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;  
} 

順便說一句,這是一個non-standard extension of gcc。在標準的C99中我找不到這個語法。

+0

這很酷! – assem 2011-03-16 15:59:57

+1

@assem這是非常不便攜的。不要這樣做,使用if/else。 – 2011-03-16 17:28:45

+0

+1 Jim,@assem,不要被這個「非常酷」的東西吸引。 – Microkernel 2011-03-17 03:50:30

10

這不是標準的C,見6.8.4.2:

每個case標籤 的表達應該是一個整型常量表達式

+0

+1! – 2011-03-16 16:02:16