C代码中switch-case中的“...”是什么

2023-12-24

这是一段代码/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程序设计语言》没有提到呢?


这是一个gcc 称为案例范围的扩展 http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case-Ranges,文档中是这样解释的:

您可以在单个 case 标签中指定一系列连续值,如下所示:

case low ... high:

您可以找到完整的列表gcc 扩展在这里 http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html。这好像是clang 也支持这个 http://clang.llvm.org/docs/UsersManual.html#gcc-extensions-not-implemented-yet尝试并保持兼容gcc。使用-pedantic标记在任一gcc or clang会警告您这是非标准的,例如:

warning: range expressions in switch statements are non-standard [-Wpedantic]

有趣的是,Linux内核使用了大量的gcc扩展 http://www.ibm.com/developerworks/library/l-gcc-hacks/本文中未涉及的扩展之一是语句表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C代码中switch-case中的“...”是什么 的相关文章

随机推荐