Content #
GNU C语言允许case关键字匹配一个数值范围,由此可以取代多级的if条件检测语句。以下这段代码的执行条件是待匹配字符为小写字母:
case 'a'...'z': /*from 'a' to 'z'*/
break;
下面是Linux内核中的代码例子。
//<arch/x86/platform/uv/tlb_uv.c>
static int local_atoi(const char *name)
{
int val = 0;
for (;; name++) {
switch (*name) {
case '0' ... '9':
val = 10*val+(*name-'0');
break;
default:
return val;
}
}
}
另外,还可以用整形数来表示范围,但是这里需要注意在“…”两边有空格,否则编译会出错。
//<drivers/usb/gadget/udc/at91_udc.c>
static int at91sam9261_udc_init(struct at91_udc *udc)
{
for (i = 0; i < NUM_ENDPOINTS; i++) {
ep = &udc->ep[i];
switch (i) {
case 0:
ep->maxpacket = 8;
break;
case 1 ...3:
ep->maxpacket = 64;
break;
case 4 ...5:
ep->maxpacket = 256;
break;
}
}
}
From #
奔跑吧Linux内核——入门篇一个64位操作系统的设计与实现