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