Here is a piece of code in /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];
}
}
}
Is it a kind of operator? Why does "The C Programming Language" not mention it?
A switch statement allows a variable to be tested for equality against a list of values. Each value is called a case, and the variable being switched on is checked for each switch case.
Table of Contents. The switch statement or switch case in java is a multi-way branch statement. Based on the value of the expression given, different parts of code can be executed quickly. The given expression can be of a primitive data type such as int, char, short, byte, and char.
The syntax of the switch statement is: statement(s); break; case constant 2: statement(s);
This is a gcc
extension called case ranges, this is how it is explained in the document:
You can specify a range of consecutive values in a single case label, like this:
case low ... high:
You can find a complete list of gcc extensions here. It seems like clang also supports this to try and stay compatible with gcc
. Using the -pedantic
flag in either gcc
or clang
will warn you that this is non-standard, for example:
warning: range expressions in switch statements are non-standard [-Wpedantic]
It is interesting to note that Linux kernel uses a lot of gcc extensions one of the extensions not covered in the article is statement expressions.
It is gcc compiler extension allowing to combine several case statement in one line.
Beware, it is not standard C and therefore not portable. It is a shorthand devised for case statements. It's well-defined since in C you can only switch on integral types.
In standard C, ...
is only used in variable length argument lists.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With