[英]What is “…” in switch-case in C code
这是/usr/src/linux-3.10.10-1-ARCH/include/linux/printk.h
的一段代码:
static inline int printk_get_level(const char *buffer)
{
if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
switch (buffer[1]) {
case '0' ... '7':
case 'd': /* KERN_DEFAULT */
return buffer[1];
}
}
}
它是一种运营商吗? 为什么“C编程语言”没有提到它?
这是一个名为case范围的gcc
扩展 ,这是它在文档中的解释:
您可以在单个案例标签中指定一系列连续值,如下所示:
case low ... high:
您可以在此处找到完整的gcc扩展列表。 似乎clang也支持这个尝试并保持与gcc
兼容。 在gcc
或clang
使用-pedantic
标志会警告您这是非标准的,例如:
warning: range expressions in switch statements are non-standard [-Wpedantic]
有趣的是, Linux内核使用了很多gcc扩展,其中一个扩展未在文章中包含语句表达式。
它是gcc编译器扩展,允许在一行中组合多个case语句。
请注意,它不是标准C,因此不便携。 这是为案例陈述设计的简写。 它定义很好,因为在C中你只能打开整数类型。
在标准C中, ...
仅用于可变长度参数列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.