2011-03-16 39 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