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

ass*_*sem 4 c switch-statement

CASE expr_no_commas ELLIPSIS expr_no_commas ':'
Run Code Online (Sandbox Code Playgroud)

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

int test(float i)
{
switch(i)
{
  case 1.3:
    printf("hi");
}
}
Run Code Online (Sandbox Code Playgroud)

它失败...

NPE*_*NPE 14

好吧,这涉及到我的一些猜测,但看起来你正在谈论gccC 的扩展,允许人们在switch案例中指定范围.

以下编译对我来说:

int test(int i)
{
  switch(i)
  {
  case 1 ... 3:
    printf("hi");
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意...并注意您无法打开float.


Lin*_*cer 11

这不是标准C,见6.8.4.2:

每个case标签的表达式应为整数常量表达式


ken*_*ytm 9

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;    
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这是一个非标准的扩展gcc.在标准C99中我找不到这种语法.