如何在c的case语句中使用省略号?

时间:2011-03-16 15:51:04

标签: c switch-statement

CASE expr_no_commas ELLIPSIS expr_no_commas ':'

我在c的语法规则中看到了这样的规则,但是当我尝试重现它时:

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

失败了......

3 个答案:

答案 0 :(得分:13)

好的,这涉及到我的一些猜测,但看起来您正在谈论C的gcc扩展,它允许在switch个案例中指定范围。

以下编译:

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

注意...并注意您无法启用float

答案 1 :(得分:11)

这不是标准C,见6.8.4.2:

  

每个案例标签的表达   应该是一个整数常量   表达

答案 2 :(得分: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中我找不到这种语法。