这是一段代码/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(使用前将#替换为@)