c - C代码中switch-case中的 "..."是什么

标签 c gcc gcc-extensions

这是/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 保持兼容。在 gccclang 中使用 -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/

相关文章:

c++ - 何时使用 goto 而不是控制结构嵌套?

C 内联汇编 - 'fst' 的操作数类型不匹配

c - 用宏类型查找替换 "getter"函数

c - 为什么 GCC 的三元扩展不支持赋值?

c - 无法理解以下函数声明

c++ - 为什么C++中没有定义n的sizeof(array A[n])是固定的?

c - 在 C 中访问时取消引用的指针数组

c - 按位运算设置十进制变量

c - 线程取消问题

c - 为什么模运算返回意外值