CASE expr_no_commas ELLIPSIS expr_no_commas ':'
我看到在C的语法规则,这样的规则,但是当我尝试重现它:如何在c的case语句中使用省略号?
int test(float i)
{
switch(i)
{
case 1.3:
printf("hi");
}
}
它失败...
CASE expr_no_commas ELLIPSIS expr_no_commas ':'
我看到在C的语法规则,这样的规则,但是当我尝试重现它:如何在c的case语句中使用省略号?
int test(float i)
{
switch(i)
{
case 1.3:
printf("hi");
}
}
它失败...
好的,这涉及到我的一些猜测,但看起来你正在谈论C的gcc
扩展,允许在switch
的情况下指定范围。
下编译对我来说:
int test(int i)
{
switch(i)
{
case 1 ... 3:
printf("hi");
}
}
注意...
,也请注意,您不能在float
切换。
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中我找不到这个语法。
这很酷! – assem 2011-03-16 15:59:57
@assem这是非常不便携的。不要这样做,使用if/else。 – 2011-03-16 17:28:45
+1 Jim,@assem,不要被这个“非常酷”的东西吸引。 – Microkernel 2011-03-17 03:50:30
这不是标准的C,见6.8.4.2:
每个case标签 的表达应该是一个整型常量表达式
+1! – 2011-03-16 16:02:16
为什么你认为省略号就是一个句号?这是......符号,即三个时期将是我的第一个猜测。 – unwind 2011-03-16 15:58:21
当二进制表示不准确时切换“float”是危险的。 – Benoit 2011-03-16 15:59:42
[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