jas*_*onz 49 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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
它是一种运营商吗?为什么"C编程语言"没有提到它?
Sha*_*our 62
您可以在单个案例标签中指定一系列连续值,如下所示:
Run Code Online (Sandbox Code Playgroud)case low ... high:
您可以在此处找到完整的gcc扩展列表.似乎clang也支持这个尝试并保持兼容gcc
.-pedantic
在其中任何一个中使用该标志gcc
或clang
将警告您这是非标准的,例如:
warning: range expressions in switch statements are non-standard [-Wpedantic]
Run Code Online (Sandbox Code Playgroud)
有趣的是,Linux内核使用了很多gcc扩展,其中一个扩展未在文章中提到,是语句表达式.
案例陈述的范围规范.
在...周围写入空格,否则在使用整数值时可能会解析错误
case '0' or case '1' or case '3' and so on case '7':
or case 'b' :
just return buffer[1];
Run Code Online (Sandbox Code Playgroud)