这是/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];
}
}
}
它是一种运算符吗?为什么《The C Programming Language》没有提到它?
最佳答案
这是一个gcc
extension called case ranges ,文档中是这样解释的:
You can specify a range of consecutive values in a single case label, like this:
case low ... high:
您可以找到 gcc extensions here 的完整列表.好像clang also supports this尝试与 gcc
保持兼容。在 gcc
或 clang
中使用 -pedantic
标志将警告您这是非标准的,例如:
warning: range expressions in switch statements are non-standard [-Wpedantic]
有趣的是 Linux kernel uses a lot of gcc extensions本文未涵盖的扩展之一是语句表达式。
关于c - C代码中switch-case中的 "..."是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18853502/